MST

星途 面试题库

面试题:Node.js 错误处理机制在 Express 框架中的应用优化

在基于 Node.js 的 Express 项目中,如何优化错误处理机制以确保不同类型的错误(如路由错误、中间件错误、业务逻辑错误)都能得到恰当处理,并向客户端返回合适的 HTTP 状态码和错误信息?请结合代码示例说明。
30.5万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

在 Express 项目中优化错误处理机制可按以下步骤进行:

  1. 全局错误处理中间件: 创建一个全局错误处理中间件,它必须定义在所有路由和中间件之后。该中间件接收四个参数: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}`);
    });
    
  2. 处理路由错误: 当请求的路由不存在时,Express 不会自动返回 404 错误。可以添加一个中间件来捕获这种情况。
    // 捕获路由错误(404)
    app.use((req, res, next) => {
        const error = new Error('Not Found');
        error.statusCode = 404;
        next(error);
    });
    
  3. 中间件错误处理: 在自定义中间件中,如果发生错误,同样使用 next(error) 将错误传递给全局错误处理中间件。
    // 自定义中间件
    const customMiddleware = (req, res, next) => {
        try {
            // 模拟中间件内的错误
            throw new Error('中间件错误');
        } catch (error) {
            error.statusCode = 403;
            next(error);
        }
    };
    
    app.use(customMiddleware);
    

通过以上方式,可以确保不同类型的错误都能得到恰当处理,并向客户端返回合适的 HTTP 状态码和错误信息。