推荐答案
在 Express 中创建自定义错误处理中间件的方式如下:
app.use((err, req, res, next) => {
// 自定义错误处理逻辑
console.error(err.stack); // 打印错误堆栈信息
res.status(500).json({
message: 'Something went wrong!',
error: err.message
});
});本题详细解读
1. 错误处理中间件的作用
错误处理中间件是 Express 中用于捕获和处理应用程序中发生的错误的特殊中间件。它与其他中间件的区别在于它有四个参数:err, req, res, next。其中 err 参数表示捕获到的错误对象。
2. 错误处理中间件的定义
错误处理中间件必须定义在所有路由和其他中间件之后,以确保它能捕获到所有未被处理的错误。它的定义方式如下:
app.use((err, req, res, next) => {
// 错误处理逻辑
});3. 自定义错误处理逻辑
在错误处理中间件中,你可以根据业务需求自定义错误处理逻辑。例如:
- 记录错误日志
- 返回特定的错误状态码
- 返回友好的错误信息给客户端
4. 示例代码解析
以下是一个完整的示例代码:
// www.javascriptcn.com code example
const express = require('express');
const app = express();
// 模拟一个抛出错误的中间件
app.use((req, res, next) => {
const error = new Error('Test error');
error.status = 400;
next(error);
});
// 自定义错误处理中间件
app.use((err, req, res, next) => {
console.error(err.stack); // 打印错误堆栈信息
res.status(err.status || 500).json({
message: err.message || 'Internal Server Error',
error: err
});
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});在这个示例中:
- 第一个中间件模拟了一个抛出错误的场景。
- 错误处理中间件捕获到这个错误,并返回一个包含错误信息的 JSON 响应。
5. 注意事项
- 错误处理中间件必须放在所有路由和其他中间件之后。
- 如果错误处理中间件中没有调用
next(),则请求处理流程会终止。 - 可以通过
err.status或err.statusCode来设置返回的 HTTP 状态码。