1

I have to implement the following workflow:

Make request no.1, get a JSON response. Manipulate this JSON object so that it can be used as payload in the second request. Make second request.

The first request is successfully implemented. I get the correct JSON object. The manipulation part is also done and tested.

I managed to create a correct postman collection for the second request. It uses the method POST, has several headers, Content-type is multipart/form-data and the payload from request no.1 is sent as Raw (in the body, options none, form-data etc ... I choose raw).

I am trying to implement this second request but get an error no matter what I try to tweak. The following is my code:

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;
  });

* The parameter payload is the response from the first request.

The error I get is this:

message=source.on is not a function, stack=TypeError: source.on is not a function

The variable manipulatedObject is a string. Currently I am copying it's value from the successful postman request to avoid errors from the manipulation process. The random token in the Content-Type header matches the ones in the manipulatedObject string. So the data are identical to the ones I use in the postman request.

I suspect the error is in the way I send the data, but I am having trouble figuring it out. I have read about this error and it seems to be generated when an object is passed to formData, but I am sending a string so I don't understand why it happens.

Lazarus Rising
  • 2,597
  • 7
  • 33
  • 58

1 Answers1

1

The values of formData accepts only three types of elements viz. string, Buffer and Stream. Refer to:request/issues/2366

U may change formData as follows:

 formData: {
     file: manipulatedObject,
   },

or

 formData: {
     file: {
        value: manipulatedObject,
        options: {},
      },
   },
senique
  • 96
  • 1
  • 3