MST

星途 面试题库

面试题:Node.js中Express构建RESTful API接口之错误处理优化

在一个基于Express构建的RESTful API项目中,已经实现了基本的接口功能。但现在要求优化错误处理机制,使其符合RESTful规范,对于不同类型的错误(如400 Bad Request、404 Not Found、500 Internal Server Error等)返回合适的HTTP状态码以及清晰的错误信息格式(例如JSON格式),请阐述实现思路并给出关键代码示例。
35.4万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 全局错误处理中间件:在Express应用中定义一个全局错误处理中间件,捕获所有未处理的异常。
  2. 区分错误类型:根据错误的性质,判断应该返回的HTTP状态码。例如,参数错误返回400,资源未找到返回404,服务器内部错误返回500等。
  3. 格式化错误信息:将错误信息格式化为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}`);
});

在上述代码中:

  1. 首先定义了一个简单的Express应用,并设置了一个模拟路由/example,该路由可能抛出错误。
  2. 然后通过app.use定义了全局错误处理中间件,它接收四个参数(err, req, res, next)。在中间件内部,根据错误类型判断并设置合适的HTTP状态码和错误信息,最后以JSON格式返回给客户端。