[英]MongoDB How to catch errors in deleteMany
我查看了deleteMany()
的 MongoDB 文档,但似乎它抛出的唯一错误是WriteConcernError
。
我正在使用 Insomnia 来提出我的请求。
这是我的要求:
DELETE HTTP://localhost:5000/api/users/delete/usernames?usernames=["a","b","c"]
如您所见,我在查询字符串中有一个数组,所以我将它传递给我的 function
@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()
不会返回任何错误,例如“找不到给定参数”等。
因为我不想回复“用户已成功删除”。 如果有一个错误,我怎么能抓住这个错误。 或者我应该如何处理?
我认为没有找到参数没有错误。 我不知道这总比没有好。 我不会将此标记为已回答,因为我认为这不是答案
async function _deleteByUsernames(usernames) {
return await User.deleteMany({username: {$in: usernames}})
.then(result => {
console.log(result);
return (result.deletedCount === 0 ?
"None of the selected user(s) deleted!":
(result.deletedCount !== usernames.length ?
`${result.deletedCount} out of ${usernames.length} selected user(s) successfully deleted!`:
"All selected user(s) successfully deleted!"))
})
.catch(err => {
return `Delete failed with error: ${err}`;
})
}
您可以将您的功能更改为以下,
@user.controller.js:
res
作为参数传递给 service function 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() ,这个 function 调用 MongoDB 驱动程序的Collection#deleteMany()
function。 返回的 promise 解析为包含 3 个属性的 object:
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}"
});
}
}
代码未经测试,您可以解决方法,看看会发生什么!
您可以将删除结果保存在变量中并检查错误
async function _deleteByUsernames(usernames) {
try {
console.log(usernames);
let userDeleteResult = await User.deleteMany({username: {$in: usernames}});
if(!userDeleteResult ){
res.json({status: false, error: 'Some error'}) // or pass the error object here
}
} catch (err) {
throw err;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.