我有一个简单的评论应用程序,使用户可以通过表单在系统中输入注释,然后将这些注释记录到页面底部的列表中。
我想修改它,以便用户可以在创建后点击评论标题,并且会加载与该评论相关的相关内容。
我已在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参数的内容?
答案 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})
这会将父参数传递给子项。