繁体   English   中英

使用PATCH修改带有节点/猫鼬的多个条目?

[英]Using PATCH to modify multiple entries with node/mongoose?

我正在尝试向我的节点服务器发送多个条目,以便更新数据库中的每个人。

我认为一种方法是通过每个人的唯一ID遍历每个人,并基于此保存更新的信息。

但是,在Employee.findById函数内部,我无法访问[i]的值,因此无法获取相关员工。 尝试修改2 Employees var i时运行此代码行,将输出;

在此处输入图片说明

router.patch('/edit', function(req, res, next) {

    for (var i = 0; i < req.body.length; i++) {

        console.log("outside " + i)

        Employee.findById(req.body[i].employeeId, function(err, employee) {

            console.log("inside " + i)

        /* 
            employee = new Employee({
              name: req.body[i].name,
            })

            employee.save();
        */


        })
    }

})

我不知道为什么console.log("inside " + i)与外部日志输出的数字不同?

另外,我不确定我采用的方法是否是正确的方法?

感谢您的任何建议!

当你的/edit路线被调用,用于循环运行,将注销"outside"声明并调用Employee.findById方法中的每个元素req.body ,将执行并调用"inside"控制台日志语句时,发现操作已完成 请注意,这是一个异步操作。

i变量在Employee.findById调用的回调内不会更改。 这是因为for循环已将i递增到req.body的元素req.body

这样,在保存员工文档时,您将无法判断所有操作是否已完成或是否发生错误,并将此信息转发给客户端。

我建议使用异步或其他流控制库。

您使用async示例:

router.patch('/edit', function(req, res, next) {
    async.each(req.body, function(obj, cb) {
        Employee.findById(obj.employeeId, function(err, employee) {
            if (err) {
                return cb(err);
            }
            employee = new Employee({name: obj.name});
            employee.save(cb);
        });
    }, function (err) {
        // any errors from callback will be handled here
        // inform you user in the response or whatever
    });
});

这是因为函数findById()异步的 循环的迭代不会等待findById()终止查询。 我建议您使用lib Async来解决此问题。 它提供了一些有用的方法来异步处理并等待响应。 在您的情况下,这样可以解决问题:

async.each(req.body, function (value, callback) {
    Employee.findById(value.employeeId, function(err, employee) {
        employee = new Employee({
          name: value.name,
        })
        // The callback indicate that this iteration is terminated.
        employee.save(callback);
    });
}, function (err) {
    // When all callback() are triggered we pass here, and this tells we finished all operation.
});

我建议您仔细阅读each文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM