【问题标题】:Express: Specify HTTP status code when throwing error in serviceExpress:在服务中抛出错误时指定 HTTP 状态码
【发布时间】:2020-05-15 21:19:30
【问题描述】:

当我的一项服务失败时,我想向客户端返回正确的 HTTP 状态代码。

假设我们有一个简单的快速应用程序,其中服务getUserById(userId) {...} 从控制器调用。该服务可能由于多种原因而失败,例如无效的用户 ID、代码中的一些错误或仅仅是因为不存在具有给定 ID 的用户。 要返回正确的 HTTP 状态代码(分别为 400、500 和 404),当我从我的服务中抛出它时,我需要以某种方式将它附加到错误中。我该怎么做?是否有任何最佳做法?还是我完全误解了什么?

到目前为止,我只是这样做了:

throw { message: 'No user with this ID exists', status: 404 }

但是考虑到should only throw standard errors,我确实觉得这不是很容易维护。

【问题讨论】:

    标签: javascript rest express error-handling http-status-codes


    【解决方案1】:

    您可以创建一个错误对象,然后为其添加自定义属性。

    let err = new Error('No user with this ID exists');
    err.status = 404;
    throw err;
    

    或者,我经常将其封装在一个函数中:

    function error(msg, status = 500) {
        let err = new Error('No user with this ID exists');
        err.status = status;
        throw err;
    }
    

    或者,您可以创建自己的 Error 子类

    class MyError extends Error {
        constructor(msg, status = 500) {
            super(msg);
            this.status = status;
        }
    }
    

    然后使用它:

    throw new MyError('No user with this ID exists', 404);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-29
      • 2022-11-02
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      相关资源
      最近更新 更多