Mongoose - 当没有找到结果时,总是返回null而不是错误?

时间:2016-07-12 13:03:39

标签: mongodb express mongoose

为什么mongoose在找不到结果时总是返回null而不是错误?

Person.findOne({ 'name': 'Ghost' }, function (err, person) {
  console.log(err); // null
  if (err) return handleError(err);
});

幽灵'在我的数据库中不存在所以我期待一个错误,但我得到null。为什么?如何才能得到错误?

2 个答案:

答案 0 :(得分:3)

因为mongoose只在出现错误时返回错误,所以找不到任何结果都不是错误。如果你得到null,你可以处理响应,如:

Person.findOne({ 'name': 'Ghost' }, function (err, person) {
  if(person === null) {
     console.log('No results found');
  }
  if (err) return handleError(err);
});

Person.findOne({ 'name': 'Ghost' }, function (err, person) {    
  if (err) {
     return handleError(err);
  } else if (person) {
     return person;
  } else {
    return 'No results found';
  }
});

答案 1 :(得分:2)

Mongoose使用err用于内部错误,例如验证失败等。如果查询成功完成(包含或不包含结果),err将包含null

什么文件说:

  

将回调传递给Mongoose中的查询的任何地方,即回调   遵循模式callback(error, results)。结果取决于什么   关于操作:对于findOne(),它是一个潜在的空单   文档,find()文档列表,count()文档数量,   update()受影响的文档数量等.API文档   模型提供了有关传递给回调的内容的更多细节。