REST HTTP 错误时的状态码 Mongoose

REST HTTP Status code if error Mongoose

可能发生错误时我必须使用哪个状态代码。当从猫鼬数据库中获取所有银行时。用户只执行此客户端操作。

客户操作

GET Url: /banks

猫鼬代码

Banks
  .find()
  .exec(function(err, banks) {
    if (err) {
      return res.status(400).send({
        message: errorHandler.getErrorMessage(err)
      });
    } else {
      res.status(200).jsonp(banks);
    }
  });

我认为状态码是 500 而不是 400。因为客户端 url 是有效的。

错误代码 4xx 表示客户端错误,例如无效请求。但是,在这种情况下,问题出在服务器端的数据库上。所以你应该使用5xx。在您的示例中,500 可以。

您可以在此处找到不同代码的快速概览: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_Server_Error

这取决于实施。

虽然状态代码 5xx 似乎是服务器上产生的此类错误的适当状态代码,但并非所有来自 Mongoose 的错误都像代码所暗示的那样是由内部服务器错误引起的。

If one would implement validation inside Mongoose schemas, validations errors would be thrown up the stack and would pass through the Model.save() callback as an error as well. Even without validation, some built-in Mongoose errors such as the Cast Error 通常由错误的输入数据触发(例如,不小心将 undefined 的值从丢失的 URL 参数传递为查询模型的 _id 字段 ).

如果您在通过 Mongoose 模型保存输入数据之前验证输入数据,可以安全地假设您从此类回调中得到的唯一错误是内部服务器错误,然后 5xx 状态代码。