get request只返回id而不是nodejs的完整元素

时间:2016-02-22 19:04:21

标签: node.js mongodb express mongoose mean

我正在构建一个平均堆栈应用程序。

当我使用它时:

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'}]
});

1 个答案:

答案 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();
    });
});

文档:http://mongoosejs.com/docs/populate.html