【问题标题】:Request with request-promise and multipart/form-data带有 request-promise 和 multipart/form-data 的请求
【发布时间】:2019-11-09 12:22:19
【问题描述】:

我必须实现以下工作流程:

发出请求 1,获得 JSON 响应。操作此 JSON 对象,使其可用作第二个请求中的有效负载。提出第二个请求。

第一个请求成功执行。我得到了正确的 JSON 对象。操作部分也已完成并经过测试。

我设法为第二个请求创建了正确的邮递员集合。它使用 POST 方法,有几个标头,Content-type 是 multipart/form-data 并且来自请求 1 的有效负载作为 Raw 发送(在正文中,选项无,form-data 等......我选择 raw) .

我正在尝试实现第二个请求,但无论我尝试调整什么都会出错。以下是我的代码:

const manipulatedObject = await this._flattenPayload(payload);
const Request = require(request-promise);

const options = {
  method: 'POST',
  uri: 'https://second_request_url',
  formData: {
    file: {
      value: manipulatedObject,
    },
  },
  headers: {
    Accept: 'application/json, text/plain, */*',
    Connection: 'keep-alive',
    'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundaryxxxxxxxxxxxxxxxx', // this is generated dynamically and matches the value in the manipulatedObject
    cookie: this.cachedCookie,
    'X-XSRF-TOKEN': this.cachedToken,
  },
};

Request(options)
  .then((body) => {
    return body;
  })
  .catch((error) => {
    return error;
  });

* 参数负载是第一个请求的响应

我得到的错误是这样的:

message=source.on 不是函数,stack=TypeError: source.on 不是 一个函数

变量操作对象是一个字符串。目前我正在从成功的邮递员请求中复制它的值,以避免操作过程中的错误。 Content-Type 标头中的随机标记与操作对象字符串中的标记匹配。所以数据与我在邮递员请求中使用的数据相同。

我怀疑错误出在我发送数据的方式上,但我无法弄清楚。我已经阅读过这个错误,它似乎是在将对象传递给 formData 时生成的,但是我正在发送一个字符串,所以我不明白它为什么会发生。

【问题讨论】:

    标签: node.js request-promise http-request-parameters


    【解决方案1】:

    formData 的值只接受三种类型的元素,即。字符串、缓冲区和流。参考:request/issues/2366

    你可以改变formData如下:

     formData: {
         file: manipulatedObject,
       },
    

     formData: {
         file: {
            value: manipulatedObject,
            options: {},
          },
       },
    

    【讨论】:

      猜你喜欢
      • 2021-10-11
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      相关资源
      最近更新 更多