用Promises处理Mongoose错误
我在我的Nodejs,REST API中使用mongoose与本地ES6承诺进行数据库pipe理。
我无法finderror handling的最佳做法。 我有一段代码看起来像这样:
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()
是否可以像mongoose查询有时那样返回undefined
。
任何帮助,将不胜感激。
编辑 :我使用findOne
和手动修改时间表,因为mongoose不能模型dynamic以及embedded架构。
Mongoose承诺使用暴露的crud函数(如newElement.save( function( err, result){} )
的callback(error, result){}
机制。 如果发生任何错误,承诺被拒绝,这是逻辑。
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) } )
将选项设置为true
将使该函数在更新后返回元素,而不是之前