如何从 Firebase Cloud Function 执行 Axios 请求

iSa*_*mya 11 firebase google-cloud-functions

我在 Firebase Cloud Function 中尝试了以下操作来执行 Axios 请求,但没有奏效。

    const functions = require('firebase-functions');
    const axios = require('axios');
    const cors = require('cors')({ origin: true });
    
    exports.checkIP = functions.https.onRequest((req, res) => {
        cors(req, res, () => {
            if( req.method !== "GET" ) {
                return res.status(401).json({
                    message: "Not allowed"
                });
            }
    
            return axios.get('https://api.ipify.org?format=json')
            .then(data => {
                console.log(data)
                res.status(200).json({
                    message: data.ip
                })
            })
            .catch(err => {
                res.status(500).json({
                    error: err
                })
            })
    
        })
    })
Run Code Online (Sandbox Code Playgroud)

我还搜索了很多关于如何将 Axios 与 Cloud Functions 结合使用的示例,但没有找到。上面的代码没有返回任何东西。

任何人都可以帮忙吗?

PS:我已经在我的 Firebase 帐户中添加了帐单明细,并且没有使用免费的 Spark 计划,而是使用了 Blaze 计划。

编辑:

我终于能够使用request-promisenode 包来做到这一点,但仍然不知道如何使用axios. 无论我尝试什么,axios都不适用于 Firebase 云功能。这就是我所做的:

npm i --save cors request request-promise

然后这是我运行的代码:https : //gist.github.com/isaumya/0081a9318e4f7723e0123f4def744a0e

也许它会帮助某人。如果有人知道怎么做,Axios请在下面回答。

小智 12

我换data.ipresponse.data.ip,并添加return两个前res.status(...使用爱可信当我尝试它的线条和为我所部署的云计算功能的作品。

我的代码是

    const functions = require('firebase-functions');
    const axios = require('axios');
    const cors = require('cors')({ origin: true });

    exports.checkIP = functions.https.onRequest((req, res) => {
      cors(req, res, () => {
        if (req.method !== "GET") {
          return res.status(401).json({
            message: "Not allowed"
          });
        }
    
        return axios.get('https://api.ipify.org?format=json')
          .then(response => {
            console.log(response.data);
            return res.status(200).json({
              message: response.data.ip
            })
          })
          .catch(err => {
            return res.status(500).json({
              error: err
            })
          })
    
      })
    });
Run Code Online (Sandbox Code Playgroud)

当我调用该函数时,我会收到类似 { "message": "127.168.121.130" } 的回复

  • cors 是做什么用的?我可以不用吗? (2认同)