使用 Promises 处理 Mongoose 错误
Mongoose error handling with Promises
我在我的 Nodejs REST API.
中使用带有本机 ES6 承诺的猫鼬进行数据库管理
我无法找到错误处理的最佳实践。我有一段代码如下所示:
Cities.findOne({'id': someid}).then((city) => {
if (!city) throw 'No city found';
//modify city.embedded.dynamic.field
return city.save();
}).then((city) => {
if (!city) throw 'City not saved';
res.send(city);
}).catch((err) => {
console.log(err);
});
我需要检查city.save()
的return是否未定义吗?或者会不会在catch中捕获到save的错误?
文档中不清楚 save()
是否可以 return undefined
像 mongoose 查询有时做的那样。
如有任何帮助,我们将不胜感激。
编辑:我正在使用 findOne
并手动修改时间表,因为 mongoose 无法模拟它的动态和嵌入式模式。
findOne()
return一个承诺。当结果为 return 时,它是 resolved
,无论它是否为空。发生错误时是rejected
。任何 find()
的空结果将是 null
,而不是 undefined
.
如果您尝试保存的元素不存在,您将得到 [TypeError: Cannot read property 'save' of null]
。
但是您可以使这更简单:
return Cities.findByIdAndUpdate(city._id, {$set:city}, {new: true} ).exec()
.then( (city) => { res.send(city) } )
将选项 new
设置为 true
使函数 return 成为元素 在 更新之后,而不是在 [=20= 之前]
Mongoose 承诺使用 callback(error, result){}
机制,该机制遵循公开的 crud 函数,例如 newElement.save( function( err, result){} )
。如果发生任何错误,承诺将被拒绝,这是逻辑。
我在我的 Nodejs REST API.
中使用带有本机 ES6 承诺的猫鼬进行数据库管理我无法找到错误处理的最佳实践。我有一段代码如下所示:
Cities.findOne({'id': someid}).then((city) => {
if (!city) throw 'No city found';
//modify city.embedded.dynamic.field
return city.save();
}).then((city) => {
if (!city) throw 'City not saved';
res.send(city);
}).catch((err) => {
console.log(err);
});
我需要检查city.save()
的return是否未定义吗?或者会不会在catch中捕获到save的错误?
文档中不清楚 save()
是否可以 return undefined
像 mongoose 查询有时做的那样。
如有任何帮助,我们将不胜感激。
编辑:我正在使用 findOne
并手动修改时间表,因为 mongoose 无法模拟它的动态和嵌入式模式。
findOne()
return一个承诺。当结果为 return 时,它是 resolved
,无论它是否为空。发生错误时是rejected
。任何 find()
的空结果将是 null
,而不是 undefined
.
如果您尝试保存的元素不存在,您将得到 [TypeError: Cannot read property 'save' of null]
。
但是您可以使这更简单:
return Cities.findByIdAndUpdate(city._id, {$set:city}, {new: true} ).exec()
.then( (city) => { res.send(city) } )
将选项 new
设置为 true
使函数 return 成为元素 在 更新之后,而不是在 [=20= 之前]
Mongoose 承诺使用 callback(error, result){}
机制,该机制遵循公开的 crud 函数,例如 newElement.save( function( err, result){} )
。如果发生任何错误,承诺将被拒绝,这是逻辑。