0

我正在查询我的数据库,按日期扫描他们的文章。用户选择一个日期,服务器查找用户的书面文章 ID 列表,扫描文章集合中的 ID,然后将请求的日期与文档的“createdAt”条目进行比较。但是,如果有多个结果,我会收到“发送错误后无法设置标头”。这是我的代码:

User.find({_id: user._id}, {written: 1}, function (err, docs) {
    if (err) throw err
    for (i = 0; i < docs[0].written.length; i++) {
        Articles.find({_id: docs[0].written[i]}, function (err, docs) {
            if (err) throw err
            if (req.query.date == Math.floor(docs[0].createdAt.getTime() / 1000 / 86400)) {
                res.send(docs)
            }
        })
    }

})
4

1 回答 1

1

您需要使用 async ( https://github.com/caolan/async ) 或 async-mini ( https://github.com/ypocat/async-mini ) 之类的东西来为您执行实际循环,然后完成所有查询后,您可以回复一系列文章。

或者,您可以有一个单独的函数,在一切完成后调用该函数。这是使用 async.each 完成您正在寻找的事情的一种方法。

var articles = [];
User.find({_id: user._id}, {written: 1}, function (err, docs) {
    if (err) throw err;
    async.each(docs[0].written, function(doc, done){
        Articles.find({_id: doc}, function (err, articlesFound) {
            if (err) done(err)
            if (req.query.date == Math.floor(doc.createdAt.getTime() / 1000 / 86400)) {
                articles.push(articlesFound);
            }
        });
    }, function(err){
        if(err) throw err;
        return res.send(articles);
    });

});

我想这就是你所追求的。

于 2013-10-12T23:05:56.753 回答