Express:在服务中抛出错误时指定 HTTP 状态代码

Express: Specify HTTP status code when throwing error in service

我想在我的一项服务失败时return向客户端发送正确的 HTTP 状态代码。

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

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

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

不过,我确实觉得考虑到 should only throw standard errors

这不是很容易维护

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

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);