Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用node.js中的请求以多部分formData发送对象_Javascript_Node.js_Multipartform Data - Fatal编程技术网

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

Javascript 如何使用node.js中的请求以多部分formData发送对象,javascript,node.js,multipartform-data,Javascript,Node.js,Multipartform Data,我正试图使用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' },

我正试图使用
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)
/sandbox/project/node_modules/request/node_modules/combined stream/node_modules/delayed stream/lib/delayed_stream.js:33
on('error',function(){});
^
TypeError:undefined不是函数
在Function.DelayedStream.create(/Users/me/sandbox/project/node_modules/request/node_modules/combined stream/node_modules/delayed stream/lib/delayed_stream.js:33:10)
在FormData.CombinedStream.append(/Users/me/sandbox/project/node_modules/request/node_modules/combined stream/lib/combined_stream.js:43:37)
在FormData.append(/Users/me/sandbox/lproject/node_modules/request/node_modules/form data/lib/form_data.js:43:3)
在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)
根据新请求(/Users/me/sandbox/project/node_modules/Request/Request.js:264:8)
应请求(/Users/me/sandbox/project/node_modules/request/index.js:50:10)
反对。(/Users/me/sandbox/project/test.js:30:1)
在模块处编译(Module.js:460:26)
在Object.Module.\u extensions..js(Module.js:478:10)
如果我删除
to
对象,一切正常


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

我在使用请求模块时遇到了类似的问题,在我将新行添加到“formData”之前,请求模块中的一切都正常工作。对我来说唯一有效的方法是创建一个字符串,该字符串将是JSON,它将在请求外部组成POST正文,并使用“body”而不是“formData”传递它

var postBody = "post body content";

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

formData
属性不处理作为值传入的对象。看见解决方案是使用
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);
});
注意:它实际上是只支持字符串的表单数据包。请求使用表单数据。下面是他们提到使用“字符串、缓冲区和文件流”的例子