【问题标题】:REST HTTP Status code if error MongooseREST HTTP 状态码,如果错误 Mongoose
【发布时间】:2016-12-24 00:42:12
【问题描述】:

当可能发生错误时我必须使用哪个状态码。何时从 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 是有效的。

【问题讨论】:

    标签: node.js rest mongoose http-status-codes


    【解决方案1】:

    这取决于实现。

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

    如果要在 Mongoose 模式中实现 validation,验证错误将被抛出堆栈,并且也会通过 Model.save() 回调作为错误。即使没有验证,一些内置的 Mongoose 错误(例如 Cast Error)通常是由错误的输入数据触发的(ex. 意外地从缺少的 URL 参数中传递了 undefined 的值作为对 _id 的查询模型的字段)。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-26
        • 2016-02-23
        • 1970-01-01
        • 2011-01-23
        • 1970-01-01
        • 2010-11-24
        • 2021-01-02
        相关资源
        最近更新 更多