Azure Functions JS:函数内部的http(s)POST请求调用不起作用

时间:2019-07-16 13:46:48

标签: javascript node.js azure https azure-functions

我目前正在从aws lambda切换到Azure函数,并尝试将我的lambda函数(js)转换为Azure函数(js)。我在功能中需要做的一件事是向URL发送HTTPS发布请求以获取一些数据。在aws lambda中效果很好。但是,似乎azure函数不支持此功能,或者我做错了事,因为它从不发送请求,而只是结束整个函数。

这是我的代码:

var https = require('https');
var http = require('http');


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

        var http_options = {
                hostname: 'somehostname',
                port: 443,
                path: 'somepath',
                method: 'POST',
                headers: {
                        'Content-Type': 'text/xml;charset=UTF-8',
                        'SOAPAction': '"https://someURL"'
                }
        };

        var body = '';

        context.log('before request');

        var req = await https.request(http_options, function (res) {

            res.setEncoding('utf8');
            body = '';

            context.log('inside request');

            res.on('data', (chunk) => {

                    body = body + chunk;
            });

            context.log('in req 2');

            res.on('end', () => {
                    var options = {
                            compact: false,
                            ignoreComment: false,
                            spaces: 1
                    };

                    var result = JSON.parse(body);
            })
        })


};

该函数始终打印“请求前”部分,并且刚刚终止。

我还尝试了一个简单的http调用,如this SO问题中所述。但是,同样的结果,该功能刚刚结束。

1 个答案:

答案 0 :(得分:0)

我不认为https.request()是一个异步方法(不会返回类似promise的类型)。如果您尝试在那里删除await关键字怎么办?

var https = require('https');
var http = require('http');


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

        var http_options = {
                hostname: 'somehostname',
                port: 443,
                path: 'somepath',
                method: 'POST',
                headers: {
                        'Content-Type': 'text/xml;charset=UTF-8',
                        'SOAPAction': '"https://someURL"'
                }
        };

        var body = '';

        context.log('before request');

        https.request(http_options, function (res) {

            res.setEncoding('utf8');
            body = '';

            context.log('inside request');

            res.on('data', (chunk) => {

                    body = body + chunk;
            });

            context.log('in req 2');

            res.on('end', () => {
                    var options = {
                            compact: false,
                            ignoreComment: false,
                            spaces: 1
                    };

                    var result = JSON.parse(body);
            });
        });


};