如何使用node.js中的请求发送多部分formData中的对象

我试图制定一个POST使用请求 ,但我不断收到一个错误,我试着将对象添加到formData

 var fs = require('fs'); var request = require('request'); var file = './test/assets/test.pdf'; var opts = { url: 'my_service', method: 'POST', auth: { user: 'username', password: 'password' }, json: true, formData: { front: fs.createReadStream(file), to: { name: 'joe bob', address_1: '123 main st', ... } } }; request(opts, function(err, resp, body) { console.log(err, body); }); 

这是错误:

 /sandbox/project/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js:33 source.on('error', function() {}); ^ TypeError: undefined is not a function at Function.DelayedStream.create (/Users/me/sandbox/project/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js:33:10) at FormData.CombinedStream.append (/Users/me/sandbox/project/node_modules/request/node_modules/combined-stream/lib/combined_stream.js:43:37) at FormData.append (/Users/me/sandbox/lproject/node_modules/request/node_modules/form-data/lib/form_data.js:43:3) at appendFormValue (/Users/me/sandbox/project/node_modules/request/request.js:466:21) at Request.init (/Users/me/sandbox/project/node_modules/request/request.js:477:11) at new Request (/Users/me/sandbox/project/node_modules/request/request.js:264:8) at request (/Users/me/sandbox/project/node_modules/request/index.js:50:10) at Object.<anonymous> (/Users/me/sandbox/project/test.js:30:1) at Module._compile (module.js:460:26) at Object.Module._extensions..js (module.js:478:10) 

如果我删除对象,一切正常。

为什么是这样 – 我做错了什么?

formData属性不处理作为值传入的对象 。 请参阅文档 。 解决scheme将是使用JSON.stringify

 var fs = require('fs'); var request = require('request'); var file = './test/assets/test.pdf'; var toObj = { name: 'joe bob', address_1: '123 main st', ... }; var opts = { url: 'my_service', method: 'POST', auth: { user: 'username', password: 'password' }, json: true, formData: { front: fs.createReadStream(file), to: JSON.stringify(toObj) } }; request(opts, function(err, resp, body) { console.log(err, body); }); 

注意:它实际上是仅支持string的表单数据包。 请求使用表单数据。 这里是他们的使用文档 ,提到使用“一个string,一个缓冲区和一个文件stream”。

我有一个类似的问题,使用请求模块,一切工作,直到我添加了一个新的行'formData'。 我唯一能做的就是创build一个string,这个string是构成请求之外的POST主体的JSON,并用“body”而不是“formData”传入。

 var postBody = "post body content"; request({ method: "POST", uri: "my_service", auth: { user: 'username', password: 'password' }, body: '{' + postBody + '}', ... }).on("error", function(error){ ... };