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);
我想在我的一项服务失败时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);