在 Express.js 中封装接口响应数据是一个常见的需求,它有助于保持 API 响应的一致性、易于维护和调试。封装响应数据通常涉及创建一个或多个中间件或工具函数,这些函数可以处理诸如设置状态码、构造响应体、添加通用头部等任务。

以下是一个简单的示例,展示了如何在 Express.js 应用中封装接口响应数据:

1. 创建一个响应封装函数

首先,你可以创建一个响应封装函数,这个函数将接收状态码、数据(可选)、消息(可选)和请求对象(可选,用于发送状态码和消息),并返回一个函数,该函数可以直接作为 Express 的响应处理函数。

// responseUtils.js

function createResponse(statusCode, data = null, message = '') {
    return function(req, res, next) {
        // 设置响应体
        const responseBody = {
            status: statusCode,
            data: data,
            message: message,
        };

        // 设置响应状态码
        res.status(statusCode);

        // 发送响应
        res.json(responseBody);
    };
}

// 导出函数
module.exports = {
    success: createResponse(200),
    created: createResponse(201),
    badRequest: (message = 'Bad Request', data = null) => createResponse(400, data, message),
    notFound: (message = 'Not Found', data = null) => createResponse(404, data, message),
    // 可以根据需要添加更多状态码的处理
};

2. 在路由中使用封装函数

接下来,在你的路由处理程序中,你可以使用上面创建的封装函数来发送响应。

// app.js 或其他路由文件

const express = require('express');
const app = express();
const responseUtils = require('./responseUtils');

app.get('/api/data', (req, res, next) => {
    // 假设这是从数据库或其他服务获取的数据
    const data = { id: 1, name: 'Example Data' };

    // 使用封装的成功响应函数
    responseUtils.success(req, res, next, data);
    // 注意:由于我们直接发送了响应,所以通常不需要调用 next()
    // 如果你需要在发送响应之前执行其他中间件,请确保在发送响应之前调用 next()
});

app.get('/api/nonexistent', (req, res, next) => {
    // 使用封装的未找到响应函数
    responseUtils.notFound('The requested resource does not exist.');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

注意:在上面的 responseUtils.success 调用中,我添加了一个额外的 next 参数以保持函数签名的一致性,但在这个特定的例子中,由于我们直接发送了响应,所以实际上并没有使用它。在 Express 的中间件模式中,next 函数用于将控制权传递给下一个中间件函数。如果你确定当前中间件已经完成了所有工作(包括发送响应),则不需要调用 next()

3. 改进和扩展

你可以根据需要扩展 responseUtils 模块,添加更多的状态码处理函数,或者添加额外的逻辑来处理日志记录、错误处理等。

封装接口响应数据是提高 API 质量和可维护性的重要步骤。通过创建可重用的响应处理函数,你可以确保所有 API 响应都遵循一致的格式,并且更容易地添加新的响应类型或修改现有响应的逻辑。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐