【发布时间】:2016-06-04 08:37:15
【问题描述】:
我正在构建一个平均堆栈应用程序。
当我使用这个时:
router.get('/courses/:course', function (req, res) {
res.json(req.course);
});
我取回了完整的对象。但是当我这样做时:
router.get('/courses/:course/reviews', function (req, res){
res.json(req.course.reviews);
});
我只取回评论 ID,而不是我希望的全部元素。
知道为什么吗?
编辑:
回答问题:
这里是 router.param :
router.param('course', function (req, res, next, id) {
var query = Course.findById(id);
query.exec(function (err, course){
if(err) { return next(err);}
if(!course) {return next(new Error('can\'t find course'));}
req.course = course;
return next();
});
});
课程是一个模型:
var CourseSchema = new mongoose.Schema({
code: String,
name: String,
courseContentGrade: Number,
courseTeachingGrade: Number,
courseAverage: Number,
reviews: [{ type: mongoose.Schema.Types.ObjectId, ref: 'review'}]
});
【问题讨论】:
-
你从哪里得到
course对象,它看起来如何? -
请显示设置
req.course的router.param()函数 -
如果您想通过路由参数访问任何内容,您需要使用
req.params.<field>访问它,因此在您的示例中,您需要使用req.params.course访问传递给课程的值。 -
如果您在课程中存储评论参考,可能您需要使用 mongoose.populate(),但我们需要更多详细信息才能发现发生了什么。正如@VsevolodGoloviznin 所问,你如何获得 req.course?
-
在编辑中回答。谢谢你的帮助:)
标签: node.js mongodb express mongoose mean