gpt4 book ai didi

node.js - Mongoose/Mongodb 更新返回值及错误处理

转载 作者:IT老高 更新时间:2023-10-28 12:29:43 26 4
gpt4 key购买 nike

我对 Mongoldb 更新的返回值以及如何处理错误感到有些困惑。

我使用 Node.js、Express.js 和 Mongoose.js 作为我的 Mongodb 驱动程序

当我浏览许多教程时,我看到的唯一错误处理方法是......

示例:一个简单的用户架构 .. 我想更新电话号码

Users 

{
email : abc@abc.com,
telephoneNumber : 123456
}

许多教程教给我的用 node.js 编写的错误处理示例

 Users.update({email: abc@abc.com}, {'$set': {telephoneNumber : 654321}, function(err, result){
if(err){
//err
}else if(!result){
//update not success
}else{
//update success
}
});

但是当我查看 Mongodb 文档时,我发现更新返回 WriteConcern 值,它返回类似这样的值

 {
"ok" : 1, // update with no err
"nModified" :1, // successfully update 1 user
"n" : 1 // found 1
}

所以我的问题是,我是否应该这样处理我的错误,这样我就可以了解更多关于更新失败的信息...

  Users.update({email: abc@abc.com}, {'$set': {telephoneNumber : 654321}, function(err, result){
if(err || result.ok === 0){
//err
}else if(result.nModified === 0){
//update fail
}else if(result.n === 0){
//could not be found
}else{
//update success
}
});

这是在 mongoose/mongodb 中进行更新处理的糟糕方法吗?

谢谢!! :)

最佳答案

以下是我们处理 mongoose/mongodb 错误的方法。它们可能是诸如“该值已存在”之类的错误或类似问题。

首先在我们添加的 mongoose 调用的错误 block 中:

if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err,req,res)
});
}

它调用了我们的 errorHandler 文件中定义的“getErrorMessage”函数,该函数可能调用唯一的错误消息函数。我们还将错误记录在我们的 mongo 数据库中的单独集合下。

exports.getErrorMessage = function(err,req,res) {
var message = '';
if (err.code) {
switch (err.code) {
case 11000:
case 11001:
message = getUniqueErrorMessage(err);
break;
default:
message = 'Something went wrong. We have logged this issue and will correct';
}
} else {
for (var errName in err.errors) {
if (err.errors[errName].message) message = err.errors[errName].message;
}
}
//log the error to Mongo
ErrorLog.create(err,req,res);
return message;
};

var getUniqueErrorMessage = function(err) {
var output;

try {
var fieldName = err.err.substring(err.err.lastIndexOf('.$') + 2, err.err.lastIndexOf('_1'));
output = fieldName.charAt(0).toUpperCase() + fieldName.slice(1) + ' already exists';

} catch (ex) {
output = 'Unique field already exists';
}
return output;

};

希望对您有所帮助,如果我能澄清任何事情,请告诉我。

关于node.js - Mongoose/Mongodb 更新返回值及错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31167683/

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