Может отправлять запрос на локальный хост с помощью node-fetch, но не может сделать это с помощью Axios - PullRequest
0 голосов
/ 16 ноября 2018

Я пытался сделать один и тот же почтовый запрос, используя node-fetch и axios.

var fetch = require('node-fetch');
var axios = require('axios');

async function fetchTest(host, port, body) {
    const response = {
        successMessage: '',
        errorMessage: ''
    }

    try {
        const streamResponse = await fetch(`${host}:${port}`, {
            method: 'post',
            body: JSON.stringify(body)
        })
        const jsonResponse = await streamResponse.json()
        response.successMessage = jsonResponse;
    } catch (error) {
        response.errorMessage = error;
    }

    return response;
}

async function axiosTest(host, port, body) {
    const response = {
        successMessage: '',
        errorMessage: ''
    }

    try {
        const jsonResponse = await axios({
            method: 'post',
            url: `${host}:${port}`, 
            data: body
        })
        response.successMessage = jsonResponse;
    } catch (error) {
        response.errorMessage = error;
    }

    return response;
}

async function test() {
    console.log(await fetchTest('http://127.0.0.1', '8801', { type: 'request', cmd: 'devices' }));
    console.log(await axiosTest('http://127.0.0.1', '8801', { type: 'request', cmd: 'devices' }));

}

test();

Запрос, сделанный с помощью node-fetch, работает хорошо. Запрос, сделанный с помощью axios, возвращает (IP-адрес отредактирован с ...) с ошибкой:

{ successMessage: '',
  errorMessage:
   { Error: connect ECONNREFUSED ...:80
       at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1161:14)
     errno: 'ECONNREFUSED',
     code: 'ECONNREFUSED',
     syscall: 'connect',
     address: '...',
     port: 80,
     config:
      { adapter: [Function: httpAdapter],
        transformRequest: [Object],
        transformResponse: [Object],
        timeout: 0,
        xsrfCookieName: 'XSRF-TOKEN',
        xsrfHeaderName: 'X-XSRF-TOKEN',
        maxContentLength: -1,
        validateStatus: [Function: validateStatus],
        headers: [Object],
        method: 'post',
        url: 'http://127.0.0.1:8801',
        data: '{"type":"request","cmd":"devices"}' },
     request:
      Writable {
        _writableState: [WritableState],
        writable: true,
        _events: [Object],
        _eventsCount: 2,
        _maxListeners: undefined,
        _options: [Object],
        _redirectCount: 1,
        _redirects: [],
        _requestBodyLength: 39,
        _requestBodyBuffers: [],
        _onNativeResponse: [Function],
        _currentRequest: [ClientRequest],
        _currentUrl: 'http://.../',
        _isRedirect: true },
     response: undefined } }

В чем может быть причина? Я что-то не так делаю?

РЕДАКТИРОВАНИЕ с дополнительной информацией, запрошенной в комментарии:

Запрос axios завершается ошибкой, если я закомментирую запрос node-fetch.

Запрос node-fetch возвращает:

{
    cmd: 'devices',
    payload: { devices: [Array] },
    type: 'response' },
}

Поскольку я обертываю результат в объекте ответа, console.log выглядит как

{ 
    successMessage:
    { 
        cmd: 'devices',
        payload: { devices: [Array] },
        type: 'response' 
    },
    errorMessage: '' 
}
...