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);
相关推荐
FungLeo5 小时前
成为全栈·Node 后端篇·配置管理:环境变量、多环境与密钥安全
node.js·环境变量·多环境配置·密钥安全
苏生Susheng6 小时前
【软件实施】Linux系统Shell脚本教程
linux·运维·服务器·chrome·spring boot·学习·实施
曹牧6 小时前
C#:文本文件读取
服务器·前端·c#
Ruiery6 小时前
Linux 6.6内核 IOMMU 深度解析(七):DMA API 与 IOMMU 集成 — 从 dma_map_single 到 iommu_map
linux·运维·服务器
FungLeo6 小时前
成为全栈·Node 后端篇·错误处理:异常分层与全局捕获
node.js·错误处理·异常分层·全局捕获·成为全栈
snow@li6 小时前
服务器运维:Alibaba Cloud Linux 4 LTS 64位 根目录全景深度解析文章
linux·运维·服务器
苏生Susheng7 小时前
【软件实施】Linux企业运维常用命令手册
java·linux·运维·服务器·springboot·springcloud·软件实施
西索斯coding7 小时前
doubao-seed-2.1-turbo 调用一直 401 怎么办?pro 版同样的 Key 却正常——5 分钟排查定位指南
java·服务器·数据库·ai
myy-learn8 小时前
31-TCP并发
服务器·网络·tcp/ip
小雪崩8 小时前
嵌入式学习 day39:TCP并发服务器模型
linux·服务器·c语言·网络·学习·tcp/ip