You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中Form-data提交后如何解析服务器返回数据?

解决Node.js提交form-data后无法解析响应数据的问题

你已经能收到服务器的响应状态码,但拿不到具体内容对吧?这是因为Node.js里的HTTP响应本质是可读流,不会直接把完整数据一次性返回给你,得手动把流里的片段拼接起来才行。给你两种常用的解决方法:

方法一:手动监听流事件(无需额外依赖)

直接修改你的回调函数,通过data事件收集数据片段,end事件处理完整数据:

form.append('location', location);
form.append('name', nameList);
form.submit('/', function(err, res) {
    console.log("upload_files")
    console.log("************")
    if (err) {
        return console.error('upload failed:', err);
    } else{
        console.log('file_upload:', res.statusCode)
        // 用来存储完整的响应数据
        let responseData = '';
        
        // 每收到一段数据就拼接到responseData里
        res.on('data', (chunk) => {
            responseData += chunk;
        });
        
        // 所有数据接收完成后处理
        res.on('end', () => {
            console.log('服务器返回的完整数据:', responseData);
            
            // 如果服务器返回的是JSON格式,解析成对象
            try {
                const parsedResult = JSON.parse(responseData);
                console.log('解析后的JSON数据:', parsedResult);
            } catch (parseErr) {
                console.log('响应不是JSON格式,直接使用原始数据即可');
            }
            
            if(res.statusCode == 200){
                files.forEach(function (file, index) { counter +=1})
            }
        });
    }
})

方法二:用concat-stream简化流处理(需要安装依赖)

如果觉得手动监听事件麻烦,可以用concat-stream这个库帮你自动收集流数据:

  1. 先安装依赖:
npm install concat-stream
  1. 修改代码:
const concat = require('concat-stream');

form.append('location', location);
form.append('name', nameList);
form.submit('/', function(err, res) {
    console.log("upload_files")
    console.log("************")
    if (err) {
        return console.error('upload failed:', err);
    } else{
        console.log('file_upload:', res.statusCode)
        
        // 用pipe把响应流导入concat-stream
        res.pipe(concat((data) => {
            // data是Buffer,转成字符串
            const responseData = data.toString();
            console.log('服务器返回的完整数据:', responseData);
            
            // 解析JSON(如果需要的话)
            try {
                const parsedResult = JSON.parse(responseData);
                console.log('解析后的JSON数据:', parsedResult);
            } catch (parseErr) {
                console.log('响应不是JSON格式');
            }
            
            if(res.statusCode == 200){
                files.forEach(function (file, index) { counter +=1})
            }
        }));
    }
})

额外提醒

如果服务器返回的是其他编码格式(比如GBK),直接用toString()可能会乱码,这时候可以用iconv-lite库来转码,安装后把data.toString()换成iconv.decode(data, 'gbk')即可。

内容的提问来源于stack exchange,提问作者ramze mosalam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:06:48