Как использовать модуль https с URI? - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь использовать собственный модуль https в nodejs.

Приведенный ниже пример кода отлично работает с библиотекой запроса-обещания

var apiver = '2017-09-01';
var resource = 'https://management.azure.com/';
const rp = require('request-promise-native');
var options = {
    uri: `${process.env["MSI_ENDPOINT"]}/?resource=${resource}&api-version=${apiver}`,
    headers: {
        'Secret': process.env["MSI_SECRET"]
    }
};
return rp(options);

Здесь uri = "http://127.0.0.1:41437/MSI/token//?resource=https://management.azure.com/&api-version=2017-09-01"

Но если я пытаюсь сделать то же самое с помощью модуля https, выдается ошибка

return new Promise( (resolve,reject) => {
    var apiver = '2017-09-01';
    var resource = 'https://management.azure.com/';
    var options = {
        "method": "GET",
        "hostname": "localhost",
        "port": 41437,
        "protocol": "https:",
        "path": `/MSI/token/?resource=${resource}&api-version=${apiver}`,
        headers: {
            'Secret': process.env["MSI_SECRET"]
        }
    };
    var req = https.request(options, function (res) {
        var body = '';
        res.setEncoding('utf8');
        res.on('data', function (chunk) {
            body += chunk;
        });
        res.on('end', function () {
            if (res.statusCode == 200) {
                resolve(body);
            } else {
                reject({'error':null,'res':res});
            }
        });
    });
    req.on('error', function (e) {
        reject({'error':e,'res':null});
    });
    req.end();
});

Выдается следующая ошибка

{ 
    hostname: 'localhost',
    port: 41437,
    protocol: 'https:',
    path: '/MSI/token/?resource=https://management.azure.com/&api-version=2017-09-01',
    headers: { Secret: '41A1BDD07D4B42159F71353FCCE2F0EB' } }
    2018-10-05T11:36:12.395 [Info] { error: {    
        Error: connect EACCES 127.0.0.1:41437
          at Object.exports._errnoException (util.js:1020:11)
          at exports._exceptionWithHostPort (util.js:1043:20)
          at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1086:14)
        code: 'EACCES',
        errno: 'EACCES',
        syscall: 'connect',
        address: '127.0.0.1',
        port: 41437 
    },
    res: null 
}

Разве невозможно это сделатьзапрос с собственным модулем https?

...