【问题标题】:nodejs async waterfall use mongoose findOneAndUpdate in the second functionnodejs 异步瀑布在第二个函数中使用猫鼬 findOneAndUpdate
【发布时间】:2018-08-12 07:41:29
【问题描述】:

我想用户异步瀑布上传文件,然后返回远程文件路径并将其传递给第二个函数 mongoose findOneAndUpdate 以保存用户文档的路径。

async.waterfall({
    uploadedFile: function (acb) { fileUpload(req, res, acb); },
    user: function (acb) { 
        Users.findOneAndUpdate({ uuid: req.user.uuid }, 
            { $set: {
                file: 'RESULTFROMWATERFALL',
                email: req.body.email,
                name: req.body.name,
    } }).exec(acb); }
}, function (err, data) {
    if (err) {
        console.log(err);
    }
    console.log('result: ', data)
});

我对此感到困惑,不知道如何继续从函数一中获取结果并将其传递给 mongoose 查找和更新函数。

如果单独使用上传功能,它的工作原理是这样的:

fileUpload(req, res, function(err, result) {
        console.log('i can see result here: ', result) // https//some.remote.path/file.txt
    })

有人可以帮我解决这个async.waterfall 示例吗?

【问题讨论】:

    标签: javascript node.js mongoose async.js


    【解决方案1】:

    试试这个:-

    async.waterfall([
    (callback) => {
        fileUpload(req, res, (err,data)=>{
            callback(err, data);
        });
    },
    (updateURL, callback)=>{
        Users.findOneAndUpdate({ uuid: req.user.uuid },
            { $set: {
                    file: 'RESULTFROMWATERFALL',
                    email: req.body.email,
                    name: req.body.name,
                } }).exec(callback); 
    }
    }], (err, data) => {
    if (err) {
        console.log(err);
    }
    console.log('result: ', data)
    });
    

    【讨论】:

    • 问题是 `req.body.email` 为空。这是为什么?我们应该对它应用一些东西吗?
    • req.body.email 在这两个函数中都为 null 吗?
    • 是的,两者都为空
    • 你能给我看一下代码吗,因为它似乎是正确的,在 async.waterfall 检查电子邮件是否到来之前,前端或控制台 req.body 可能存在一些错误,如果不会这意味着它是前端错误。
    • 很高兴为您提供帮助。
    猜你喜欢
    • 2017-03-08
    • 2014-11-16
    • 2013-10-24
    • 2017-04-26
    • 2018-03-11
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 2017-08-03
    相关资源
    最近更新 更多