我正在构建一个平均堆栈应用程序。
当我使用它时:
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'}]
});
答案 0 :(得分:1)
您需要使用mongoose.populate()填充评论字段。
下面是修订后的router.param,请注意在查询中添加了populate方法。
router.param('course', function (req, res, next, id) {
var query = Course.findById(id).populate('reviews');
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();
});
});