我目前正在从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问题中所述。但是,同样的结果,该功能刚刚结束。
答案 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);
});
});
};