面试题答案
一键面试实现思路
- 全局错误处理中间件:在Express应用中定义一个全局错误处理中间件,捕获所有未处理的异常。
- 区分错误类型:根据错误的性质,判断应该返回的HTTP状态码。例如,参数错误返回400,资源未找到返回404,服务器内部错误返回500等。
- 格式化错误信息:将错误信息格式化为JSON格式,以便客户端能够清晰地理解错误内容。
关键代码示例
const express = require('express');
const app = express();
// 模拟一些路由和业务逻辑
app.get('/example', (req, res) => {
// 假设这里可能抛出错误
throw new Error('模拟服务器内部错误');
});
// 全局错误处理中间件
app.use((err, req, res, next) => {
let statusCode = 500;
let errorMessage = 'Internal Server Error';
if (err.name === 'ValidationError') {
statusCode = 400;
errorMessage = 'Bad Request: 输入参数有误';
} else if (err.message.includes('Not Found')) {
statusCode = 404;
errorMessage = 'Not Found: 资源未找到';
}
res.status(statusCode).json({
error: errorMessage
});
});
const port = 3000;
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
在上述代码中:
- 首先定义了一个简单的Express应用,并设置了一个模拟路由
/example
,该路由可能抛出错误。 - 然后通过
app.use
定义了全局错误处理中间件,它接收四个参数(err, req, res, next)
。在中间件内部,根据错误类型判断并设置合适的HTTP状态码和错误信息,最后以JSON格式返回给客户端。