geotddrinfo ENOTFOUND с помощью Node.js http.request()

Я пытаюсь следовать учебному пособию по бэйджкиту здесь https://github.com/mozilla/badgekit-api/wiki/Using-BadgeKit-API

Однако, ошибка, которую я получаю, является ошибкой узла с моим синтаксисом (я думаю). Это то, что у меня есть в файле RetrieveBadgeData.js

var http = require("http");
var jws = require('jws');

var claimData = {
    header: { typ: 'JWT', alg: 'HS256' },
    payload: {
        key: 'mastersecret',
        exp: Date.now() + (1000 * 60),
        method: 'GET',
        path: '/systems'
    },
    secret: 'mastersecret'
};
var requestOptions = {
    host: 'http://192.168.1.59:8080',
    path: '/systems',
    method: 'GET',
    headers: { 'Authorization': 'JWT token="' + jws.sign(claimData) + '"' }
};

var apiRequest = http.request(requestOptions, function (apiResult) {
    apiResult.on('data', function (badgeData) {
        //process badgeData

    });
});

Если я перехожу к 192.168.1.59:8080, я получаю то, что вы должны получить обратно, если работает API узла. Но, когда я запускаю узел RetrieveBadgeData.js (выполняя приведенный выше код), я получаю эту ошибку.

events.js:72
    throw er; // unhandled 'error' event
          ^
Error: getaddrinfo ENOTFOUND
    at errnoException (dns.js:37:11)
    at Object.onanswer [as oncomplete] (dns.js:124:16)

Есть идеи?

Редактировать Я также попробовал это, что дает мне ту же ошибку

var requestOptions = {
    hostname: 'http://192.168.1.59'
    , port: 8080
    , path: '/systems/badgekit/badges'
    , method: 'GET'
    , headers: { 'Authorization': 'JWT token="' + jws.sign(claimData) + '"' }
};

1 ответ

Решение

Проблема в том, как вы указываете хост:

host: 'http://192.168.1.59:8080'

Используйте это вместо:

hostname: '192.168.1.59`,
port: 8080

http:// это протокол, а не хост. Ошибка, которую вы получаете, заключается в том, что Node.js не может разрешить указанное вами имя хоста. Документы Node.js также предполагают, что использование hostname предпочтительнее host,

Другие вопросы по тегам