node:res.send-a数组不工作

时间:2018-04-02 13:21:10

标签: javascript node.js mongodb express

我的用户模型有一个Array类型的字段,其值为

"courseId" : [
   "5ac1fe64cfdda22c9c27f264",
   "5ac207d5794f2910a04cc9fa",
   "5ac207d5794f2910a04cc9fa"
]

我的路线以这种方式配置:

router.get('/:userid/vendor-dashboard', function (req, res) {
    var courseID = [];
    User.findById(req.params.userid, function (err, doc) {
        if (err) {
            res.send(err);
        } else {
            for (var i = 0; i < doc.courseId.length; i++) {
                Course.findById(doc.courseId[i], function (err, course) {
                    if (err) {
                        console.log(err);
                    } else {
                        console.log(course.title);
                        courseID.push(course.title);
                    }
                })
            }
            res.send(JSON.stringify(courseID));
        }
    })
})

首先我找到一个用户,当找到用户时,他应该找到阵列中的所有课程并显示他们的标题。

现在,我可以在控制台中获取标题,但是当我尝试通过res.send发送它时,它显示一个空数组。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

主要问题是您在从课程模型获得响应之前发送了响应。

使用回调的正确方法是:

&#13;
&#13;
router.get('/:userid/vendor-dashboard', function(req, res) {
var courseID = [];
User.findById(req.params.userid, function(err, doc) {
    if (err) {
        return res.send(err);
    }

    var resolved = 0;
    for (var i = 0; i < doc.courseId.length; i++) {
        Course.findById(doc.courseId[i], function(err, course) {
            if (err) {
                return console.log(err);
            }

            courseID.push(course.title);

            if (++resolved === doc.courseId.length) {
                res.send(JSON.stringify(courseID));
            }
        })
    }
})
})
&#13;
&#13;
&#13;