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

如何使用Node.js原生http模块的request方法发送form-data数据

Node.js原生http模块发送form-data请求的实现方法

Node.js原生http.request()返回的是可写流实例,没有直接的body配置参数,需要通过流写入的方式提交FormData数据,你可以直接补全现有代码的流写入逻辑即可正常发送请求。

具体实现步骤

  • 你创建的FormData实例本身就是可读流,直接通过pipe()方法把数据写入请求对象即可,管道会自动在数据写完后调用req.end()结束请求
  • 配置响应回调的处理逻辑,拼接响应流拿到完整返回结果
  • 监听请求的error事件,捕获网络异常避免进程崩溃

注意:不要手动配置Content-Type请求头,form.getHeaders()会自动生成包含正确分隔符boundary的请求头,手动配置会导致分隔符不匹配,服务端无法正常解析表单数据。

完整可运行代码

import { request } from 'http';
import { createReadStream } from 'fs';

// Node.js版本低于18时需要先安装form-data第三方包,再导入:
// import FormData from 'form-data';

// 配置参数
const FILE = createReadStream('./要上传的本地文件路径');
const HOST = '目标服务主机地址';
const PATH = '接口请求路径';

const form = new FormData();
form.append('file', FILE);
// 可追加其他普通表单字段
form.append('user_id', '12345');

const req = request(
  {
    host: HOST,
    port: '80',
    method: 'POST',
    path: PATH,
    headers: form.getHeaders(),        
  },
  response => {
    // 拼接响应数据
    let responseResult = '';
    response.on('data', chunk => {
      responseResult += chunk;
    });
    response.on('end', () => {
      console.log('请求返回结果:', responseResult);
    });
  }
);

// 核心逻辑:将FormData流写入请求对象
form.pipe(req);

// 监听请求异常
req.on('error', err => {
  console.error('请求发送失败:', err);
});

如果你的FormData中只有普通文本字段,没有文件这类流类型的字段,也可以不用管道,改为手动写入缓冲区后结束请求:

req.write(form.getBuffer());
req.end();

内容的提问来源于stack exchange,提问作者JINWOO HONG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:45:04