javascript
const express = require('express');
const fs = require('fs');
const app = express();
const port = 3333;
app.post('/', (req, res) => {
const chunks = []; // 用来存储请求体的数据块
req.on('data', (chunk) => {
chunks.push(chunk); // 将接收到的数据块添加到数组中
});
req.on('end', () => {
const body = Buffer.concat(chunks); // 将数据块拼接成完整的请求体
const filePath = './raw_request_body.txt'; // 文件路径
fs.writeFile(filePath, body, (err) => {
if (err) {
console.error('Error writing to file:', err);
return res.status(500).send('Error writing to file');
}
console.log('Raw request body written to file successfully');
res.send('Raw request body received and written to file');
});
});
});
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
1、监听req
对象的**data
**事件来接收请求体的数据块,并将它们存储在一个数组中。
2、当请求结束时(即end
事件触发时),我们使用Buffer.concat
将数组中的所有数据块拼接成一个完整的Buffer
对象,然后将其写入到文件中。
请注意,这种方法仅适用于请求体不是非常大的情况,因为整个请求体都会存储在内存中。如果请求体非常大,您可能需要使用流来逐步写入文件,以避免内存不足的问题。
此外,如果您还想记录请求的其他信息(如头部、URL等),您可以像之前那样直接访问req.headers
、req.url
等属性,并将它们以您喜欢的方式写入文件。
result:
{"phone":"123412342134"}
注意:此处的body是Buffer类型,如果想要转换为对象类型,需要以下几步:
javascript
let body = Buffer.concat(chunks); // 将数据块拼接成完整的请求体
body = body.toString('utf8'); // 转换为字符串类型 - JSON类型(因为数据本来就是json格式的)
body = JSON.parse(body); // 将JSON类型(json字符串)转换为对象类型
console.log(body);