首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Express Router参数

Express Router参数
EN

Stack Overflow用户
提问于 2015-01-14 09:50:41
回答 3查看 2.7K关注 0票数 1

我有一些学生模型保存到一个mongodb实例,我正在尝试通过用户名获取。这是我为Student定义的mongoose模型:

代码语言:javascript
复制
var studentSchema = mongoose.Schema({
  local : {
    username : String,
    password : String,
  }
});

在我的路由文件中,我正在尝试编写一个router.param,这样我就可以对/students/<用户名>执行CRUD操作。我的代码如下所示:

代码语言:javascript
复制
router.param('student', function(req, res, next, username) {
  var query = Student.findOne({ 'username' : username });

  query.exec(function(err, student) {
    if (err)
      return next(err);
    if (!student)
      return next(new Error("Can't find student."));

    req.student = student;
    return next();
  });
});

我能够成功地查询我的/students路由以获取数据库中的所有学生文档,但是我的router.param代码似乎无法工作。错误。我不确定我的router.param代码出了什么问题。

任何帮助都是非常感谢的!

EN

回答 3

Stack Overflow用户

发布于 2015-01-14 11:09:05

如果使用router.param,则每次传递该参数时都将执行此操作。我不知道这是否是您想要的,但据我所知,您应该使用如下内容:

代码语言:javascript
复制
 router.get('/students/:username', function(req, res) {
     Student.findOne({'username': req.params.username}, function (doc) {

这样,当您将用户名发送到特定路由时,您将找到该用户并显示所需的所有数据。

如果有帮助,请告诉我。

票数 1
EN

Stack Overflow用户

发布于 2015-01-15 11:26:27

Student.findOne({ 'local.username' : username });

票数 1
EN

Stack Overflow用户

发布于 2016-10-22 01:03:58

当您执行任何操作时,Param名称应该是相同的!

代码语言:javascript
复制
router.param('student', function(req, res, next, student) { <--- Should be student
  var query = Student.findOne({ 'username' : student });<--- Should be student

  query.exec(function(err, student) {
    if (err)
      return next(err);
    if (!student)
      return next(new Error("Can't find student."));

    req.student = student;
    return next();
  });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27934612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档