Javascript 在azure函数(js)中,异步/等待调用后的POST请求不起作用

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'

我目前正在使用javascript中的azure函数。在我的函数中,我首先从CosmoDB中获取一个特定元素,这是异步/等待部分。我得到一个结果,然后我想做一个https POST请求。然而,我的问题是,它从未完成HTTPs请求,我真的不知道为什么。我做错了什么

正如您所见,我尝试了两种不同的请求方式,一种是使用标准https函数,另一种是使用npm请求包注释掉部分。然而,这两种方法都行不通

这是我的密码:

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中添加一个主体!!