如何使用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
相关产品推荐
相关产品推荐

