如何从Azure函数内部发出基于HTTP的发布请求(NodeJS)?

问题描述 投票:0回答:1

我有一个场景,其中事件中心正在接收数据并且触发Azure功能以获取数据,并且Azure功能应该使用所获取的数据作为有效负载发出POST请求并从服务器获取响应。我正在使用基于promise的npm Http模块'Axios',因为响应时间可能因有效负载而异。 (Azure函数在NodeJS中);问题是,没有Post请求正在进行

尝试异步 - 等待发送请求的呼叫,仍然无法正常工作。

这是代码

module.exports = async function (context, eventHubMessages) {
    context.log(`JavaScript eventhub trigger function called for message array ${eventHubMessages}`);

    var data = {};

    eventHubMessages.forEach((message, index) => {
        context.log(`Processed message ${message}`);
        data = message;
    });

    const axios = require('axios');
    module.exports=async function(context,req){

      let response=  await axios.post('http:example.com/post',     
        { 
          data 
        } 
        )
        .then((res) => {
        context.log(`statusCode: ${res.statusCode}`)
        context.log(res)
        })
        .catch((error) => {
        context.error(error)
        })

        context.log(`Output content: ${res}`);

        }
};

这是function.json

{
  "bindings": [
    {
      "type": "eventHubTrigger",
      "name": "eventHubMessages",
      "direction": "in",
      "eventHubName": "name-eventhub",
      "connection": "eventhub-key",
      "cardinality": "many",
      "consumerGroup": "$Default"
    },
    {
      "type": "http",
      "name": "$return",
      "direction": "out"
    }
   ]
}

预期产量:

Processed message [object]
statusCode : 200
Output content: response // print response in here

实际产量:

Processed message [object]

输出中未显示状态代码或响应。

node.js http-post axios azure-functions azure-eventhub
1个回答
0
投票

如果你await承诺,你不需要链接thencatch

const axios = require('axios');
module.exports=async function(context,req){
  try {
    const response =  await axios.post('http:example.com/post', {data})
    context.log(`statusCode: ${response.statusCode}`);
    context.log(response);
    return response; // or return a custom object using properties from response
  } catch (error) {
    // If the promise rejects, an error will be thrown and caught here
    context.error(error);
  }
};
© www.soinside.com 2019 - 2024. All rights reserved.