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

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类型,如果想要转换为对象类型,需要以下几步:

  let body = Buffer.concat(chunks); // 将数据块拼接成完整的请求体  

  body = body.toString('utf8'); // 转换为字符串类型 - JSON类型(因为数据本来就是json格式的)

  body = JSON.parse(body); // 将JSON类型(json字符串)转换为对象类型

  console.log(body);

相关推荐

  1. node服务器——处理原始请求

    2024-04-30 11:48:01       35 阅读
  2. 处理HTTP请求服务器

    2024-04-30 11:48:01       25 阅读
  3. 总结:服务器批量处理http请求大致流程

    2024-04-30 11:48:01       50 阅读
  4. 前端处理axios请求下载后端返回文件

    2024-04-30 11:48:01       35 阅读
  5. go HTTP请求处理

    2024-04-30 11:48:01       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-30 11:48:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-30 11:48:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-30 11:48:01       82 阅读
  4. Python语言-面向对象

    2024-04-30 11:48:01       91 阅读

热门阅读

  1. UNIXRTC

    2024-04-30 11:48:01       25 阅读
  2. 基于SpringBoot的企业客户管理系统源码数据库

    2024-04-30 11:48:01       28 阅读
  3. 4- 29

    4- 29

    2024-04-30 11:48:01      33 阅读
  4. Python 连接 Oracle 数据库加入超时处理机制

    2024-04-30 11:48:01       20 阅读
  5. 字符串分割成List的几种方式

    2024-04-30 11:48:01       28 阅读
  6. Managing Digital Design and Web Development MANG6531

    2024-04-30 11:48:01       26 阅读
  7. 前端调用WebSocket协议接口获取数据

    2024-04-30 11:48:01       41 阅读
  8. 使用 Ant Design Vue踩过的那些坑

    2024-04-30 11:48:01       35 阅读
  9. 20240427-线程基础-结束线程

    2024-04-30 11:48:01       37 阅读
  10. C++:初始C++

    2024-04-30 11:48:01       27 阅读
  11. 初识MVC

    初识MVC

    2024-04-30 11:48:01      33 阅读
  12. QT 获取本机所有 IP 地址

    2024-04-30 11:48:01       37 阅读
  13. python深度拷贝

    2024-04-30 11:48:01       33 阅读