Nodejs 收到 POST 的 data, 用 querystring.parse() 的方法得不到对象,求助

发布于 1周前 作者 yibo5220 来自 nodejs/Nestjs

Nodejs 收到 POST 的 data, 用 querystring.parse() 的方法得不到对象,求助
POST 的 data:{
name:‘123’
}
在服务器里写

req.on(‘data’, function (requestData) {
reqRaw = requestData;
reqData = querystring.parse(requestData);
});

得到的 reqRaw 确实是 ‘ name=123 ’ , 但是 JSON.stringify( reqData ) 得到的却是 {}

初学 Node,不知道碰到了什么坑?


3 回复

req 的 data 事件是分块的。
req 属于 Readable Stream
data 事件用来收集分块的数据
end 事件表示数据已经全部发送完毕
https://nodejs.org/dist/latest-v8.x/docs/api/stream.html#stream_event_data
数据最后处理放在 end 事件里


确实是这样,谢谢!

在 Node.js 中处理 POST 请求的数据时,如果你使用 querystring.parse() 方法得不到对象,通常可能是因为数据格式不正确或者处理方式有误。以下是一些可能的解决方案:

  1. 确保数据是查询字符串格式querystring.parse() 方法适用于解析 URL 查询字符串格式的数据(即 key1=value1&key2=value2)。如果 POST 请求的数据不是这种格式,你需要根据实际情况使用其他解析方法。

  2. 使用 BuffertoString 方法: 确保你正确地从请求体中读取了数据。以下是一个示例代码,展示如何处理 POST 请求中的数据:

    const http = require('http');
    const querystring = require('querystring');
    
    const server = http.createServer((req, res) => {
      if (req.method === 'POST') {
        let body = '';
        req.on('data', chunk => {
          body += chunk.toString(); // 将接收到的数据块转换为字符串并累加
        });
        req.on('end', () => {
          const parsedData = querystring.parse(body);
          console.log(parsedData);
          res.end('Data received');
        });
      }
    });
    
    server.listen(3000, () => {
      console.log('Server is listening on port 3000');
    });
    
  3. 检查请求头: 确保请求头中的 Content-Typeapplication/x-www-form-urlencoded,这是 querystring.parse() 方法期望的 MIME 类型。

如果上述方法仍然无法解决问题,请检查 POST 请求的具体内容和格式,确保它们符合你的解析逻辑。

回到顶部