How to do Axios request from Firebase Cloud Function
I experienced the same issue. An HTTP request with axios
returns the following error message :
TypeError: Converting circular structure to JSON
Here is an explanation of what is going on and how to get around this
You can use the following package : https://github.com/moll/json-stringify-safe
I'm not sure about the consistency of this approach and personally went for request-promise
, which is heavier than axios but allows straightforward HTTP requests.
I changed data.ip
to response.data.ip
and added return
before the two res.status(...
lines and the deployed cloud function works for me using Axios when I try it.
The code I have is
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
})
})
})
});
When I invoke the function I get back a reply like { "message": "127.168.121.130" }