Ошибка запроса-обещания Nodejs при отправке запроса POST? - PullRequest
0 голосов
/ 28 декабря 2018

Когда я пытаюсь отправить пост-запрос, используя модуль запроса-обещания, установленный через npm, я получаю сообщение об ошибке и не могу понять, почему.

Я пытался удалить части опций и заголовок, но дляПроще говоря, я просто застрял.

    function sendData() {
        var options = {
            method: 'POST',
            uri: `http://www.myurl.com/placeholder.json`,
            body: {
                "data":"desiredData"
            },
            headers: {
                "Accept": "application/json",
                "Accept-Encoding": "gzip, deflate",
                "Accept-Language": "en-US,en;q=0.9",
                "Connection": "keep-alive",
                "Content-Type": "application/x-www-form-urlencoded",
                "X-Requested-With": "XMLHttpRequest"
            }
        }
        rp(options)
            .then(function (parsedBody) {
                console.log(parsedBody)
            })
            .catch(function (err) {
                console.log(err)
            });
    }

sendData();

Должен быть отправлен почтовый запрос и зарегистрирован возвращенный JSON, но вместо этого я получаю следующую ошибку:

_http_outgoing.js:654
    throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'first argument',
    ^

TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be one of type string or Buffer
    at write_ (_http_outgoing.js:654:11)
    at ClientRequest.write (_http_outgoing.js:629:10)
    at Request.write (C:\Users\ninja_000\Desktop\TronJS\node_modules\request\request.js:1500:27)
    at end (C:\Users\ninja_000\Desktop\TronJS\node_modules\request\request.js:549:18)
    at Immediate.<anonymous> (C:\Users\ninja_000\Desktop\TronJS\node_modules\request\request.js:578:7)
    at runCallback (timers.js:756:18)
    at tryOnImmediate (timers.js:717:5)
    at processImmediate [as _immediateCallback] (timers.js:697:5)

Ответы [ 4 ]

0 голосов
/ 28 декабря 2018

Мне удалось это исправить, сначала я добавил json: true под заголовками, которые затем привели к другой ошибке, опубликованной выше.Чтобы решить эту проблему, мне также пришлось изменить тип контента на application/json, спасибо всем, кто помог.

0 голосов
/ 28 декабря 2018

В сообщении об ошибке говорится об ошибке аргумента, поэтому проверьте часть тела вашего кода в функции sendData().

попробуйте это,

function sendData() {
    var options = {
        method: 'POST',
        uri: 'http://www.myurl.com/placeholder.json',
        body: {
            data:'desiredData'
        },
        headers: {
            "Accept": "application/json",
            "Accept-Encoding": "gzip, deflate",
            "Accept-Language": "en-US,en;q=0.9",
            "Connection": "keep-alive",
            "Content-Type": "application/x-www-form-urlencoded",
            "X-Requested-With": "XMLHttpRequest"
        }
    }
    rp(options)
        .then(function (parsedBody) {
            console.log(parsedBody)
        })
        .catch(function (err) {
            console.log(err)
        });
}

Я редактирую 6-ю строкуваш код.

0 голосов
/ 28 декабря 2018

Я создал этот пример, чтобы понять функционирование request-promise.

Установите option.body для ваших данных и json: true для кодирования тела в JSON.

Я используюпростой фальшивый сервер REST API, так что вы можете запустить пример, ничего не меняя.

const rp = require('request-promise');
function sendData() {
  var options = {
    method: 'POST',
    uri: 'https://jsonplaceholder.typicode.com/posts',
    body: {
      title: 'foo',
      body: 'bar',
      userId: 1
    },
    headers: {
      "Content-type": "application/json; charset=UTF-8"
    },
    json: true // Automatically stringifies the body to JSON
  };

  rp(options)
    .then((parsedBody) => {
      console.log(parsedBody);
    })
    .catch((err) => {
      console.log(err);
    });
}
sendData();
0 голосов
/ 28 декабря 2018

попробуйте изменить тип контента

function sendData() {
    var options = {
        method: 'POST',
        uri: `http://www.myurl.com/placeholder.json`,
        body: {
            "data":"desiredData // this should be a JSON format if you are using 
                                //application/json
        },
        headers: {
            "Accept": "application/json",
            "Accept-Encoding": "gzip, deflate",
            "Accept-Language": "en-US,en;q=0.9",
            "Connection": "keep-alive",
            "Content-Type": "application/json",
            "X-Requested-With": "XMLHttpRequest"
        }
    }
    rp(options)
        .then(function (parsedBody) {
            console.log(parsedBody)
        })
        .catch(function (err) {
            console.log(err)
        });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...