使用 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){} )。如果发生任何错误,承诺将被拒绝,这是逻辑。