面试题答案
一键面试实现思路
- 错误捕获:在处理HTTP请求的路由函数和中间件中,使用
try - catch
块捕获同步错误,对于异步操作(如数据库查询、文件读取等),可以使用async/await
结合try - catch
或者使用.catch()
链式调用。 - 错误类型判断:捕获到错误后,根据错误的类型(如
SyntaxError
、ReferenceError
、自定义错误等)来决定返回给客户端的HTTP状态码和错误信息。 - 设置HTTP状态码和返回错误信息:使用Node.js的HTTP响应对象(如
res
)来设置合适的HTTP状态码(如400表示请求错误,500表示服务器内部错误等),并将错误信息以JSON或者文本格式返回给客户端。
关键代码示例
以下是一个使用Express框架(基于Node.js)的示例:
const express = require('express');
const app = express();
// 模拟一个可能出错的路由
app.get('/example', async (req, res) => {
try {
// 模拟一个异步操作,这里使用setTimeout代替真实异步操作
await new Promise((resolve, reject) => {
setTimeout(() => {
// 模拟一个错误
throw new Error('模拟的服务器错误');
}, 1000);
});
res.send('成功');
} catch (error) {
let statusCode = 500;
let errorMessage = '服务器内部错误';
if (error instanceof SyntaxError) {
statusCode = 400;
errorMessage = '语法错误';
} else if (error.name === 'CustomError') {
statusCode = 403;
errorMessage = '自定义错误,权限不足';
}
res.status(statusCode).json({ error: errorMessage });
}
});
const port = 3000;
app.listen(port, () => {
console.log(`服务器在端口 ${port} 上运行`);
});
上述代码在处理/example
路由时,模拟了一个可能出错的异步操作。当捕获到错误时,根据错误类型设置不同的HTTP状态码和错误信息返回给客户端。如果是SyntaxError
设置为400状态码,如果是自定义错误(这里仅示例,实际需要自定义错误类)设置为403状态码,其他未知错误设置为500状态码。