【问题标题】:get request only returns id and not the full element with nodejs获取请求仅返回 id 而不是 nodejs 的完整元素
【发布时间】: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.courserouter.param()函数
  • 如果您想通过路由参数访问任何内容,您需要使用req.params.<field> 访问它,因此在您的示例中,您需要使用req.params.course 访问传递给课程的值。
  • 如果您在课程中存储评论参考,可能您需要使用 mongoose.populate(),但我们需要更多详细信息才能发现发生了什么。正如@VsevolodGoloviznin 所问,你如何获得 req.course?
  • 在编辑中回答。谢谢你的帮助:)

标签: node.js mongodb express mongoose mean


【解决方案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

【讨论】:

  • 嗨,我使用了您的解决方案,但没有任何改变。我仍然只能取回评论的 ID。
  • @Puck7 请再试一次,我已编辑帖子并将“评论”更改为“评论”
  • 嗨,它成功了,谢谢!很抱歉,我第一次没有正确阅读您的解决方案以发现“s”。我有一个新错误。当我 curl 获取评论时,我收到一条错误消息,告诉我评论架构未注册。我会打开一个新问题谢谢:)
  • 太好了,您可能需要在课程架构的 refs 参数中使用复数形式的“评论”。 Mongoose 会自动将集合名称复数。
  • 嘿,我在课程中添加了一个 s 到 ref 并且它抑制了我的错误。但是现在当我 curl 获得评论时,我没有错误,而是 empy [] 尽管该课程已经有几个评论(如果我 curl 获得所有课程,我可以看到它们)有什么建议吗? :)
猜你喜欢
  • 2016-06-05
  • 1970-01-01
  • 2013-11-30
  • 2014-07-01
  • 2022-01-06
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
相关资源
最近更新 更多