gpt4 book ai didi

javascript - 无法使用http模块nodejs azure函数执行http请求

转载 作者:可可西里 更新时间:2023-11-01 17:04:30 25 4
gpt4 key购买 nike

我正在尝试使用 javascript 在 azure 函数上使用 Node 模块 http 发出 http 请求,由于某种原因 http.request 没有接收数据(没有打印错误)就像请求被阻止一样)。 azure 的配置或代码有什么问题吗?我是否遗漏了一些非常明显的东西?

Code is running fine on local js file

context.log('JavaScript定时器触发函数运行!', timeStamp);按预期打印,但 context.log("SUCCESS", JSON.parse(data)); 根本不打印。

还尝试了不同的库(request、axios)但没有成功


module.exports = async function (context, myTimer) {
var timeStamp = new Date().toISOString();

if (myTimer.IsPastDue)
{
context.log('JavaScript is running late!');
}
context.log('JavaScript timer trigger function ran!', timeStamp);

const http = require('http');
http.get('http://myAPIurl', (resp) => {
let data = '';

// A chunk of data has been recieved.
resp.on('data', (chunk) => {
data += chunk;
});

// The whole response has been received. Print out the result.
resp.on('end', () => {
context.log("SUCCESS", JSON.parse(data));
});

}).on("error", (err) => {
context.log("ERROR: " + err.message);
});

}

最佳答案

我使用 Axios 重写了您的代码。它支持开箱即用的 async/await,并简化了许多代码以按照您的预期运行,因为它使异步代码像同步代码一样执行。

我认为您可能遇到的主要问题是 JavaScript 中的所有内容都是异步的。因此,Azure Function 运行时在异步函数完成之前就退出了,因为它不像发出 HTTP 请求时的同步代码那样阻塞。如果要使用回调,则需要在回调函数内调用 context.done(),以便 Azure Function 在回调完成之前不会退出。通过使用 async/await,您可以保证您的代码将阻塞 HTTP 请求,直到收到响应或超时。在下面的示例中,Axios 将返回一个包含数据作为元素的响应对象。我正在通过解构操作提取数据,这允许我记录数据

const axios = require('axios');
const url = 'https://google.com';

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

try {
const { data } = await axios.get(url);
context.log(data);
// do something with the data
return data;
} catch (err) {
context.log(err);
// do something with the error
}

context.done();
}

在 Azure 函数上安装包

  1. 前往 Azure 门户;选择您的 Azure Function 应用
  2. 选择平台功能。然后开发工具下的高级工具(Kudu)
  3. 使用文件资源管理器导航至 site/wwwroot/。您应该在其中看到一个 package.json 文件,以及几个文件夹,每个文件夹都包含您的函数名称。
  4. 从该目录运行npm install --save axios
  5. 要确认它是否有效,请使用铅笔图标编辑 package.jsonaxios 应列在 dependencies json 元素

关于javascript - 无法使用http模块nodejs azure函数执行http请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56451646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com