我查看了 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
、b
和 c
的文档
但 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/