Problem:
You’re using request to send a POST request with a body that should be JSON-encoded, but you are encountering an error similar to this:
Error: Argument error, options.body. at setContentLength (/home/uli/myproj/node_modules/request/request.js:434:28) at Request.init (/home/uli/myproj/node_modules/request/request.js:439:5) at new Request (/home/uli/myproj/node_modules/request/request.js:128:8) at request (/home/uli/myproj/node_modules/request/index.js:53:10) at Function.post (/home/uli/myproj/node_modules/request/index.js:61:12)
and, additionally this stacktrace:
TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be one of type string or Buffer at write_ (_http_outgoing.js:647:11) at ClientRequest.write (_http_outgoing.js:622:10) at Request.write (/home/uli/myproj/node_modules/request/request.js:1501:27) at end (/home/uli/myproj/node_modules/request/request.js:546:18) at Immediate.<anonymous> (/home/uli/myproj/node_modules/request/request.js:575:7) at runCallback (timers.js:763:18) at tryOnImmediate (timers.js:734:5) at processImmediate (timers.js:716:5)
Solution:
The error basically tells you that request can’t determine the length of the body, as you didn’t tell it how to encode the body and it isn’t a simple string or buffer. The solution is to tell request to use JSON body encoding by adding json: true
to the options parameter (first argument to request.post
). A valid options parameter looks like this:
const opts = { url: 'http://localhost:1234/api/myapi', body: {/* your body object */}, json: true // <-- Add this line };