使用Axios和Firebase云函数调用API

2ul0zpep  于 2022-11-05  发布在  iOS
关注(0)|答案(1)|浏览(170)

我想做一个Google Cloud函数,为我调用一个外部API。在对Google做了一些研究之后,我找到了使用Axios的方法。当我在自己的节点上使用它时,调用实际上是有效的,但当我想将该函数部署到Google Cloud函数时,我总是得到一个错误(函数无法初始化。错误:函数已终止。)
我参加了火焰计划。

const functions = require("firebase-functions");
const axios = require("axios");

exports.getData = functions.https.onRequest((req, res) => {
  return axios.get("http://api.marketstack.com/v1/eod?access_key='myAccessKey'&symbols=AAPL")
      .then((response) => {
        const apiResponse = response.data;
        if (Array.isArray(apiResponse["data"])) {
          apiResponse["data"].forEach((stockData) => {
            console.log(stockData["symbol"]);
          });
        }
      }).catch((error) => {
        console.log(error);
      });
});

有人能帮帮我吗?

**编辑:**我终于修复了它:错误在于,我最终得到了两个package.json文件(一个在它应该在的目录中,另一个我实际上不需要)。当我用npm install安装依赖项时,axios被添加到了错误的packageiderjson文件中。不幸的是,另一个packageiderjson文件成功地到达了服务器,我最终得到了一个包。json文件没有必要的服务器依赖关系,因此导致错误发生。

fumotvh3

fumotvh31#

我没有测试您的代码,但是您应该在then()块中返回“something”(一个值、null、一个Promise等),以向云函数平台指示异步工作已经完成。有关更多详细信息,请参见文档中的here

exports.getData = functions.https.onRequest((req, res) => {
  return axios.get("http://api.marketstack.com/v1/eod?access_key='myAccessKey'&symbols=AAPL")
      .then((response) => {
        const apiResponse = response.data;
        if (Array.isArray(apiResponse["data"])) {
          apiResponse["data"].forEach((stockData) => {
            console.log(stockData["symbol"]);
          });
        }
        return null;
      }).catch((error) => {
        console.log(error);
      });
});

您可能希望在then()中做更多的事情,而不仅仅是记录值,例如,调用异步Firebase方法来写入数据库(Firestore或RTDB):在这种情况下,请注意返回该方法返回的Promise。

相关问题