我在我的Nodejs,REST API中使用mongoose和本机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()
的返回是否未定义?或者保存中的错误会被捕获?
在文档中不清楚save()
是否可以返回undefined
,就像有时候mongoose查询一样。
任何帮助都将不胜感激。
修改:我使用findOne
并手动修改日程安排,因为mongoose无法对其动态和嵌入的架构进行建模。
答案 0 :(得分:1)
findOne()
返回一个承诺。返回结果时为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
会使该函数在更新之后返回元素,而不是
答案 1 :(得分:0)
Mongoose promises使用跟随暴露的crud函数的callback(error, result){}
机制,例如newElement.save( function( err, result){} )
。如果发生任何错误,则拒绝承诺,这是逻辑。