我已经尝试过在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
})
})
})
})
我也用Google搜索了很多有关如何将Axios与Cloud Functions一起使用的示例,但没有找到。上面的代码未返回任何内容。
有人可以帮忙吗?
附言::我已经在Firebase帐户中添加了结算明细,而不是使用免费的Spark计划,而是使用了Blaze计划。
我终于可以使用request-promise
节点程序包来执行此操作,但是仍然不知道如何使用axios
来执行此操作。无论我如何尝试,axios
在Firebase云功能中均不起作用。这就是我所做的:
npm i --save cors request request-promise
这是我运行的代码:https://gist.github.com/isaumya/0081a9318e4f7723e0123f4def744a0e
也许会帮助某人。如果有人知道如何使用Axios
进行此操作,请在下面回答。
答案 0 :(得分:2)
我将data.ip
更改为response.data.ip
,并在两条return
行之前添加了res.status(...
,并且在尝试使用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(response => {
console.log(response.data);
return res.status(200).json({
message: response.data.ip
})
})
.catch(err => {
return res.status(500).json({
error: err
})
})
})
});
当我调用该函数时,我会得到如下回复 { “消息”:“ 127.168.121.130” }
答案 1 :(得分:0)
我遇到了同样的问题。带有axios
的HTTP请求返回以下错误消息:
TypeError: Converting circular structure to JSON
Here is an explanation of what is going on and how to get around this
您可以使用以下软件包: https://github.com/moll/json-stringify-safe
我不确定这种方法的一致性,因此我个人选择了request-promise
,它比axios重,但允许直接的HTTP请求。