Как сделать https вызов из функции Azure? - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь создать функцию Azure, используя nodeJS, но когда я звоню в https API, я получаю сообщение об ошибке.

Можно ли сделать HTTPS-вызов из функции Azure?

Вот мой код

const https = require('https');
const querystring = require('querystring');

module.exports = async function (context, req) {

    if (req.query.accessCode || (req.body && req.body.accessCode)) {

        var options = {
            host: 'api.mysite.com',
            port: 443,
            path: '/oauth/access_token',
            method: 'POST'
        };

        var postData = querystring.stringify({
            client_id : '1234',
            client_secret: 'xyz',
            code: req.query.accessCode
        });


        var req = https.request(options, function(res) {
            context.log('STATUS: ' + res.statusCode);
            context.log('HEADERS: ' + JSON.stringify(res.headers));

            res.on('data', function (chunk) {
                context.log('BODY: ' + chunk);
            });
        });

        req.on('error', function(e) {
            context.log('problem with request: ' + e.message);
        });

        req.write(postData);
        req.end();

        context.res = {
            status: 200,
            body: "Hello " + (req.query.accessCode)
        };
    } else {
       context.res = {
            status: 400,
           body: "Please pass a name on the query string or in the request body"
      };
    }

    context.done();
};

Я получаю сообщение об ошибке, но не вижу ошибки на консоли, также, если я прокомментирую все вызовы https, все работает нормально, и я вижу Helloсообщение на экране.

1 Ответ

0 голосов
/ 28 сентября 2018

Две точки для исправления

  1. Удалить context.done();.См. документ Azure .

    Если ваша функция использует объявление асинхронной функции JavaScript (доступно с использованием узла 8+ в функциях версии 2.x), вам не нужно использовать контекст.сделанный().Обратный вызов context.done вызывается неявно.

  2. Переименуйте ваш запрос https.request как var myReq = https.request(options, function(res).

    Конфликт имен вызывает ошибку, так как функция имеетвстроенный req объект объявлен.

...