node服务器——处理原始的请求流

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.headersreq.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);
相关推荐
sunxunyong7 小时前
CGroup配置
linux·运维·服务器
Never_Satisfied8 小时前
在JavaScript / Node.js中,package.json文件中的依赖项自动选择最新版安装
javascript·node.js·json
LuDvei9 小时前
windows 中 vs code远程连接linux
linux·运维·服务器·windows
生活爱好者!9 小时前
NAS帮我找回童年的快乐!部署 小游戏
运维·服务器·docker·容器·娱乐
GDAL9 小时前
MANIFEST.in简介
linux·服务器·前端·python
蜕变的小白9 小时前
基于Linux的天气查询项目
linux·运维·服务器
小云数据库服务专线9 小时前
linux grep命令
linux·运维·服务器
李昊哲小课10 小时前
Python CSV 模块完整教程
java·服务器·python
yhole10 小时前
如何升级node.js版本
node.js
木子欢儿10 小时前
从零到精通 Neovim:Ubuntu 下的终极开发利器指南
linux·运维·服务器·ubuntu