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

标签 node.js mongodb express mongoose

我查看了 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;
    }
}

我知道没有包含用户名 abc 的文档 但 deleteMany() 不会返回任何错误,例如“无法找到给定的参数”等。

因为我不想回复“用户已成功删除”。 如果有错误,我该如何捕获该错误。 或者我应该如何处理?

最佳答案

您可以将您的功能更改为以下,

@ user.controller.js:

  • 将 async/await 放入函数中,并在 try/catch block 中添加代码,并在服务函数中将 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/

相关文章:

java - 通过 vnet 对等连接将 Azure 应用程序服务连接到 MongoDB Atlas

ruby - 使用 mongodb/mongoid 运行时更改模型

php - 我们可以使用单个 PHP 文件连接同一主机上的 mongodb 服务器和 mysql 服务器吗?

javascript - 从 Node js 服务器中的 html 引用 javascript 文件

javascript - 如何在 Express 应用程序中获取下一条路线的路径

javascript - 在异步函数上调用 `bind()` 部分有效

node.js - 使用 pg-promise 进行附加数据的多次插入

javascript - Firestore 一次创建多个文档

javascript - 如何正确测试函数

javascript - promise 问题 : Trying to wrap mysql queries to use it on NodeJS/Express