Nodejs 收到 POST 的 data, 用 querystring.parse() 的方法得不到对象,求助
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,不知道碰到了什么坑?
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()
方法得不到对象,通常可能是因为数据格式不正确或者处理方式有误。以下是一些可能的解决方案:
-
确保数据是查询字符串格式:
querystring.parse()
方法适用于解析 URL 查询字符串格式的数据(即key1=value1&key2=value2
)。如果 POST 请求的数据不是这种格式,你需要根据实际情况使用其他解析方法。 -
使用
Buffer
和toString
方法: 确保你正确地从请求体中读取了数据。以下是一个示例代码,展示如何处理 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'); });
-
检查请求头: 确保请求头中的
Content-Type
是application/x-www-form-urlencoded
,这是querystring.parse()
方法期望的 MIME 类型。
如果上述方法仍然无法解决问题,请检查 POST 请求的具体内容和格式,确保它们符合你的解析逻辑。