Javascript Express:在服务中引发错误时指定HTTP状态代码

Javascript Express:在服务中引发错误时指定HTTP状态代码,javascript,rest,express,error-handling,http-status-codes,Javascript,Rest,Express,Error Handling,Http Status Codes,当我的一项服务出现故障时,我想向客户端返回正确的HTTP状态代码 假设我们有一个简单的express应用程序,其中从控制器调用服务getUserByIduserId{…}。服务可能会因多种原因而失败,例如无效的用户id、代码中的某些错误或仅仅因为不存在具有给定id的用户。 为了分别返回正确的HTTP状态码400、500和404,当我从服务中抛出错误时,我需要将其附加到错误上。我如何做到这一点,是否有任何最佳做法?还是我完全误解了什么 到目前为止,我只是这样做: 抛出{消息:“不存在具有此ID的用

当我的一项服务出现故障时,我想向客户端返回正确的HTTP状态代码

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

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

抛出{消息:“不存在具有此ID的用户”,状态:404}


但是,考虑到这个问题,我确实觉得这不是很容易维护。

您可以创建一个错误对象,然后只需向其添加自定义属性即可

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;
}
或者,您可以创建自己的错误子类

class MyError extends Error {
    constructor(msg, status = 500) {
        super(msg);
        this.status = status;
    }
}
然后使用它:

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