为什么req.params返回'undefined'?

时间:2014-08-31 08:47:12

标签: node.js express routes mongoose

我有一个简单的评论应用程序,使用户可以通过表单在系统中输入注释,然后将这些注释记录到页面底部的列表中。

我想修改它,以便用户可以在创建后点击评论标题,并且会加载与该评论相关的相关内容。

我已在app.js中修改了我的路线,以查找:id

并且还修改了我的主 Show.js 路由,以id命令使用findOne作为参数来查找注释。

我还输入了console.log()命令来注销req.params.id

var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var Comment = mongoose.model('Comment', Comment);

router.get('/', function(req, res) {
        Comment.findOne({ id: req.params.id }, function(err, comment){
            console.log(req.params.id)
        });
});

module.exports = router;

但是,我回来的所有内容都是终端中的undefined消息。

如果我将console.log()直接放在我的app.js中,我会按预期记录ID。

app.use('/:id', function(req,res) {
    console.log(req.params.id)
});

我的路线中是否遗漏了阻止我获取id参数的内容?

2 个答案:

答案 0 :(得分:1)

您需要在获取路线中指定:id,如下所示:

// GET /1 -> print 1
router.get('/:id', function(req, res) {
    console.log(req.params.id);
});
// GET /foo/1/bar/2 -> print 1, print 2
router.get('/foo/:id1/bar/:id2', function(req, res) {
    console.log(req.params.id1);
    console.log(req.params.id2);
});

答案 1 :(得分:1)

在路由器页面中调用路由器时需要传递{mergeParams:true}

    var router = express.router({mergeParams: true})

这会将父参数传递给子项。