Node.js + Express - 如何记录请求正文和响应正文

作者:编程家 分类: 编程代码 时间:2025-09-12

使用Node.js和Express开发Web应用程序时,经常需要记录请求和响应的正文内容。这对于调试和监控应用程序非常有用,因为我们可以查看请求和响应的详细信息。本文将介绍如何在Node.js和Express中记录请求和响应的正文内容,并提供相应的案例代码。

背景介绍

在开发Web应用程序时,我们经常需要查看请求和响应的正文内容。请求正文是客户端发送给服务器的数据,而响应正文是服务器发送给客户端的数据。记录请求和响应的正文内容可以帮助我们了解应用程序的运行情况,以及在有问题时进行调试。

记录请求正文

要记录请求正文,我们可以使用Node.js中的中间件来拦截请求,并将请求正文保存到日志文件中。下面是一个示例代码:

javascript

const express = require('express');

const fs = require('fs');

const app = express();

// 创建一个写入流,将请求正文保存到文件中

const requestLogStream = fs.createWriteStream('request.log', { flags: 'a' });

// 使用body-parser中间件解析请求正文

app.use(express.json());

// 使用自定义中间件拦截请求,并将请求正文写入日志文件

app.use((req, res, next) => {

requestLogStream.write(JSON.stringify(req.body) + '\n');

next();

});

// 处理请求的路由

app.post('/api/users', (req, res) => {

// 处理请求...

});

// 启动服务器

app.listen(3000, () => {

console.log('服务器已启动');

});

在上面的代码中,我们首先创建了一个写入流`requestLogStream`,用于将请求正文保存到文件`request.log`中。然后,我们使用`express.json()`中间件解析请求正文。最后,我们使用自定义中间件拦截请求,并将请求正文写入日志文件中。

记录响应正文

要记录响应正文,我们可以使用Express的`response`对象的`write`方法的钩子函数来拦截响应,并将响应正文保存到日志文件中。下面是一个示例代码:

javascript

const express = require('express');

const fs = require('fs');

const app = express();

// 创建一个写入流,将响应正文保存到文件中

const responseLogStream = fs.createWriteStream('response.log', { flags: 'a' });

// 使用body-parser中间件解析请求正文

app.use(express.json());

// 使用自定义中间件拦截响应,并将响应正文写入日志文件

app.use((req, res, next) => {

const oldWrite = res.write;

const oldEnd = res.end;

const chunks = [];

res.write = function (chunk) {

chunks.push(chunk);

oldWrite.apply(res, arguments);

};

res.end = function (chunk) {

if (chunk) {

chunks.push(chunk);

}

const body = Buffer.concat(chunks).toString('utf8');

responseLogStream.write(body + '\n');

oldEnd.apply(res, arguments);

};

next();

});

// 处理请求的路由

app.post('/api/users', (req, res) => {

// 处理请求...

res.json({ message: '用户创建成功' });

});

// 启动服务器

app.listen(3000, () => {

console.log('服务器已启动');

});

在上面的代码中,我们首先创建了一个写入流`responseLogStream`,用于将响应正文保存到文件`response.log`中。然后,我们使用`express.json()`中间件解析请求正文。接下来,我们使用自定义中间件拦截响应,并将响应正文写入日志文件中。

在本文中,我们介绍了如何在Node.js和Express中记录请求和响应的正文内容。通过使用中间件和钩子函数,我们可以拦截请求和响应,并将其保存到日志文件中。这对于调试和监控应用程序非常有用。希望本文对你理解如何记录请求和响应的正文内容有所帮助。