Javascript 在azure函数(js)中,异步/等待调用后的POST请求不起作用
我目前正在使用javascript中的azure函数。在我的函数中,我首先从CosmoDB中获取一个特定元素,这是异步/等待部分。我得到一个结果,然后我想做一个https POST请求。然而,我的问题是,它从未完成HTTPs请求,我真的不知道为什么。我做错了什么 正如您所见,我尝试了两种不同的请求方式,一种是使用标准https函数,另一种是使用npm请求包注释掉部分。然而,这两种方法都行不通 这是我的密码:Javascript 在azure函数(js)中,异步/等待调用后的POST请求不起作用,javascript,node.js,azure,http-post,azure-functions,Javascript,Node.js,Azure,Http Post,Azure Functions,我目前正在使用javascript中的azure函数。在我的函数中,我首先从CosmoDB中获取一个特定元素,这是异步/等待部分。我得到一个结果,然后我想做一个https POST请求。然而,我的问题是,它从未完成HTTPs请求,我真的不知道为什么。我做错了什么 正如您所见,我尝试了两种不同的请求方式,一种是使用标准https函数,另一种是使用npm请求包注释掉部分。然而,这两种方法都行不通 这是我的密码: const CosmosClient = require('@azure/cosmos'
const CosmosClient = require('@azure/cosmos').CosmosClient;
var https = require('https');
var http = require('http');
var request = require('request');
const endpoint = "someEndpoint";
const masterKey = "anymasterkey";
const database = {
"id": "Database"
};
const container = {
"id": "Container1"
};
const databaseId = database.id;
const containerId = container.id;
const client = new CosmosClient({
endpoint: endpoint,
auth: {
masterKey: masterKey
}
});
module.exports = function (context, req) {
const country = "de";
const bban = 12345678;
const querySpec = {
query: "SELECT * FROM Container1 f WHERE f.country = @country AND f.bban = @bban",
parameters: [{
name: "@country",
value: country
},
{
name: "@bban",
value: bban
}
]
};
getContainers(querySpec).then((results) => {
const result = results[0];
context.log('here before request');
var options = {
host: 'example.com',
port: '80',
path: '/test',
method: 'POST'
};
// Set up the request
var req = http.request(options, (res) => {
var body = "";
context.log('request');
res.on("data", (chunk) => {
body += chunk;
});
res.on("end", () => {
context.res = body;
context.done();
});
}).on("error", (error) => {
context.log('error');
context.res = {
status: 500,
body: error
};
context.done();
});
req.end();
// request({
// baseUrl: 'someURL',
// port: 443,
// uri: 'someuri',
// method: 'POST',
// headers: {
// 'Content-Type': 'text/xml;charset=UTF-8',
// 'SOAPAction': 'someaction'
// },
// function (error, response, body) {
// context.log('inside request')
// if (error) {
// context.log('error', error);
// } else {
// context.log('response');
// }
// }
// })
})
};
async function getContainers(querySpec) {
const {container, database} = await init();
return new Promise(async (resolve, reject) => {
const {
result: results
} = await container.items.query(querySpec).toArray();
resolve(results);
})
}
async function init() {
const {
database
} = await client.databases.createIfNotExists({
id: databaseId
});
const {
container
} = await database.containers.createIfNotExists({
id: containerId
});
return {
database,
container
};
}
发生的最后一件事是在请求之前打印here。在此之后,函数将不执行任何操作,直到超时。那么我做错了什么?我不能将wait/async和请求结合起来吗 如评论所述,您没有向POST呼叫发送任何数据。您需要在req.end之前有一个req.write 请求写入数据; 请求结束;
这就是为什么POST通话对你来说是失败的。在此修复之后,它应该可以工作了您看到服务器上的调用了吗?我想我无法检查,因为我在azure Portal中运行了该函数。当我将请求放入该函数时,它的行为是相同的,所以我想知道我是否不能在azure函数中发送请求?或者我做错了什么?这里有没有一种特殊的发送请求的方式?你的发帖请求是否需要任何人?@TarunLalwani是的,谢谢!我完全忘记了我需要在req.writedata中添加一个主体!!