面试题答案
一键面试在 Express 项目中优化错误处理机制可按以下步骤进行:
- 全局错误处理中间件:
创建一个全局错误处理中间件,它必须定义在所有路由和中间件之后。该中间件接收四个参数:
err
(错误对象)、req
(请求对象)、res
(响应对象)、next
(下一个中间件函数)。const express = require('express'); const app = express(); // 模拟业务逻辑错误 app.get('/error', (req, res, next) => { const error = new Error('业务逻辑错误'); error.statusCode = 400; next(error); }); // 全局错误处理中间件 app.use((err, req, res, next) => { let statusCode = err.statusCode || 500; let errorMessage = err.message || 'Internal Server Error'; res.status(statusCode).json({ error: errorMessage }); }); const port = 3000; app.listen(port, () => { console.log(`Server running on port ${port}`); });
- 处理路由错误:
当请求的路由不存在时,Express 不会自动返回 404 错误。可以添加一个中间件来捕获这种情况。
// 捕获路由错误(404) app.use((req, res, next) => { const error = new Error('Not Found'); error.statusCode = 404; next(error); });
- 中间件错误处理:
在自定义中间件中,如果发生错误,同样使用
next(error)
将错误传递给全局错误处理中间件。// 自定义中间件 const customMiddleware = (req, res, next) => { try { // 模拟中间件内的错误 throw new Error('中间件错误'); } catch (error) { error.statusCode = 403; next(error); } }; app.use(customMiddleware);
通过以上方式,可以确保不同类型的错误都能得到恰当处理,并向客户端返回合适的 HTTP 状态码和错误信息。