Behebung von NodeJS request-Fehler: Argument error, options.body

English Deutsch

Problem:

Du verwendest request, um eine POST-Anfrage mit einem JSON-kodierten Body zu senden, triffst aber auf einen Fehler ähnlich diesem:

request_error_example.txt
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)

und zusätzlich diesen Stacktrace:

request_typeerror_trace.txt
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)

Lösung

Der Fehler sagt dir im Wesentlichen, dass request die Länge des Bodys nicht bestimmen kann, da du ihm nicht mitgeteilt hast, wie der Body kodiert werden soll, und es kein einfacher String oder Buffer ist. Die Lösung besteht darin, request anzuweisen, JSON-Body-Kodierung zu verwenden, indem du json: true zum Optionsparameter (erstes Argument von request.post) hinzufügst. Ein gültiger Optionsparameter sieht so aus:

request_json_opts.js
const opts = {
    url: 'http://localhost:1234/api/myapi',
    body: {/* dein Body-Objekt */},
    json: true // <-- Diese Zeile hinzufügen
};

Check out similar posts by category: Javascript, NodeJS