javascript - nodejs 快速响应追加到列表中

标签 javascript node.js express mongoose

我在一个路由中有多个 res.send,如何将它们全部附加到一个并在最后发送累积列表? 我更喜欢采用以下形式:

{
"writer": {success message},
"archive": {success message},
 ...
}

还有一个类似上面的列表错误。 这是代码:

router.post('/some/route', function (req, res) {
    if (req.isLoggedIn()) {
        return res.status(403).json({});
    }
    MyModel.findById(req.user._id,function (err, data) {
        if(err || data.rights !== 'super'){
            return res.status(403).json({});
        }
        if(req.body.writer){
            Books.update(
                { writer : req.body.id},
                { $set : { writer : req.body.writer} },
                function (err) {
                    if(err){
                        res.status(500).send(err);
                    }
                    else{
                        res.status(200).send('updated successfully.');
                    }
                }
            );
        }else{
            Books.remove({writer: req.body.id}, function(err){
                if (err){ return console.log(err)}
            });
        }

        MetaInfo.findOneAndRemove({_id: req.body.id}, function (err, data) {
            console.log(err);            
        });
        Archive.findOne({_id: req.body.id},function (err, data) {

            smtpTransporter.sendMail({...}, function (error, response) {
                if (error) {
                    console.log(error);
                } else {
                    console.log("Mail sent");
                }
                smtpTransporter.close();
            });

            data.remove();
            if (err) {
                console.log(err);
                return res.status(200).json({
                    success: false,
                    message: 'server error',
                    err: err
                });
            }
            res.status(200).json({
                success: true
            });
        })
    });
});

最佳答案

我假设您的问题是对数据库的异步调用。

所以最好选择一个您选择的库(例如 async )并执行您的异步处理,在回调中最后发送您的结果。

您的结果可能如下所示:

async.parallel([
    function(callback) { ... },
    function(callback) { ... }
], function(err, results) {
    // send your result here
});

请注意,如果您使用的是 .parallel,那么如果其中一个 promise 失败,将立即调用最终回调。查看docu

关于javascript - nodejs 快速响应追加到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43831153/

相关文章:

angularjs - 如何在 Angular JS 中使用 $http GET 方法发送数据?

node.js - 如何从 Mongoose 返回的对象中删除属性

javascript - javascript 中的正则表达式循环和逻辑

javascript - 获取与标签相同的下拉列表的值

javascript - JSLint 将 'window' 作为全局变量的问题

sql-server - NodeJS - SQL Server 连接关闭

javascript - 如何在 javascript/jQuery 中将字符串值评估为 bool 值?

Node.js集群;仅在使用颜色时控制台输出困惑

node.js - 从nodejsexpress登录cakephp

javascript - 等待异步函数完成而不添加回调