用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将使该函数更新返回元素,而不是之前