Node和MongoDB完成后更新事务并返回响应

时间:2018-02-21 17:11:18

标签: node.js mongodb

我正在使用Node和Mongodb来更新来自反应应用的交易。更新后,我希望收到成功或错误的响应。

在我的设置中,应用API会调用以下代码。代码可以找到并且更新成功。如何在更新完成后显示成功或错误(如果有的话),如何返回对api的响应?我无法在UpdateDB中执行此操作,导致无法访问响应。我应该以不同的方式设置它吗?

exports.updateTransactions = function(req, res) {
    console.log('update transtest function entered with req.body value: ', req.body);

    let transactions = req.body.transUpdate;
    let returnType = req.body.returnType;
    let year = req.body.year;

    let transid;
    let category;
    let notes;

    for (var i = 0, len = transactions.length; i < len; i++) {
        transid = parseInt(transactions[i].transid);
        category = transactions[i].category;
        notes = transactions[i].notes;

        var update = {
            $set: {
                category: category,
                notes: notes
            }
        };

        var filter = {
            transid: transid
        };

        UpdateDB(filter,update)
    }
}

function UpdateDB (filter, update){
  db.collection('transtest', function(err, collection) {
      collection.findOneAndUpdate(filter, update,function(err, items) {
      });
  });
}

1 个答案:

答案 0 :(得分:0)

您的问题可能会使用javascript的async awaittry catch功能解决。 在这里,我写了一些可能有用的代码。 将这些内容添加到您的代码中并尝试它是否有效。

exports.updateTransactions = async function (req, res) {
    // ...
    for (var i = 0, len = transactions.length; i < len; i++) {
        // ... 
        try {
            await UpdateDB(filter, update);
        } catch (error) {
            return error;
        }
    }
    return "success";
}

async function UpdateDB(filter, update) {
    var collection = await db.collection('transtest');
    await collection.findOneAndUpdate(filter, update);
}