gpt4 book ai didi

node.js - MongoDB 如何捕获 deleteMany 中的错误

转载 作者:行者123 更新时间:2023-12-04 08:21:15 27 4
gpt4 key购买 nike

我查看了 deleteMany() 的 MongoDB 文档但它抛出的唯一错误似乎是 WriteConcernError .
我正在使用 Insomnia 来提出我的请求。
这是我的要求:

DELETE HTTP://localhost:5000/api/users/delete/usernames?usernames=["a","b","c"]
如您所见,我在查询字符串中有一个数组
所以我把它传递给我的函数
@ user.controller.js
function _deleteByUsernames(req, res, next) {
userService.deleteByUsernames(JSON.parse(req.query.usernames))
.then(() => res.status(200).json({"message": "User(s) successfully deleted!"}))
.catch(err => next(err));
}
@ user.service.js
async function _deleteByUsernames(usernames) {
try {
console.log(usernames);
await User.deleteMany({username: {$in: usernames}});
} catch (err) {
throw err;
}
}
我知道没有带有用户名的文档 a , bc但是 deleteMany()不会返回任何错误,例如“找不到给定的参数”等。
因为我不想回复“用户成功删除”。
如果有一个错误,我怎么能捕获那个错误。
或者我应该如何处理?

最佳答案

您可以将您的功能更改为以下,
@ user.controller.js:

  • 在函数中放入async/await,在try/catch块中添加代码,并通过res作为服务函数中的参数 deleteByUsernames ,
  • async function _deleteByUsernames(req, res, next) {
    try {
    await userService.deleteByUsernames(res, JSON.parse(req.query.usernames));
    } catch (err) {
    next(err);
    }
    }
    @ user.service.js:
    deleteMany() , 该函数调用MongoDB驱动的 Collection#deleteMany()功能。返回的 promise 解析为一个包含 3 个属性的对象: ok : 1 如果没有发生错误 deletedCount : 删除的文件数 n : 删除的文件数。等于deletedCount。
    async function _deleteByUsernames(res, usernames) {
    let response = await User.deleteMany({ username: { $in: usernames } });
    // ERROR
    if (response.ok != 1) {
    res.status(400).json({ "message": "User(s) not deleted, Something want wrong!" });
    }
    // SUCCESS
    else {
    res.status(200).json({
    "message": `${response.deletedCount} User(s) successfully deleted out of ${response.n}"
    });
    }
    }

    Code is not tested, you can workaround and see what happens!

    关于node.js - MongoDB 如何捕获 deleteMany 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65488948/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com