我正试图使用axios从firebase函数中获取NSE Option Chain json数据,但请求在调用时挂起。
NSE API在firebase-功能本地开发服务器、邮递员、chrome上运行良好,但在部署后失败,而不是事件给出错误消息。显示请求超时的日志。
const functions = require("firebase-functions");
const admin = require('firebase-admin')
const axios = require('axios').default
admin.initializeApp(functions.config().firebase);
exports.getData = functions.region('asia-south1').https.onRequest(async (req, res) => {
try {
var resp = await axios({
url: "https://www.nseindia.com/api/option-chain-indices?symbol=BANKNIFTY",
headers: {
'Accept': '*/*',
'Access-Control-Allow-Origin': '*',
}
})
console.log(resp.data)
res.json(resp.data)
} catch (e) {
console.log(e)
}
finally {
return
}
})
谷歌云功能日志
在建议之后,我试图得到这样的错误消息。。。
try {
var resp = await axios({
url: process.env.URL,
headers: {
'Accept': '*/*',
'Access-Control-Allow-Origin': '*',
}
})
console.log(resp.data)
res.json(resp.data)
} catch (e) {
functions.logger.error('error block')
res.json({ e })
}
得到响应";错误:无法处理请求";铬
gcp日志截图
GCP日志没有显示";错误块";,所以它只是在chrome中暂停消息。似乎NSE API只是出于某种原因拒绝了来自gcp函数的请求。
用另一个APIhttps://jsonplaceholder.typicode.com/todos/1
代替NSE API。
当NSE API部署在谷歌云功能上时,它似乎需要从chrome和poster获得特定的头部,但不需要axios。
API必须返回错误,但您不会通过返回响应来终止函数。尝试将代码重构为:
exports.getData = functions.region('asia-south1').https.onRequest(async (req, res) => {
try {
var resp = await axios({
...
})
console.log(resp.data)
res.json(resp.data)
} catch (e) {
console.log(e)
// Return error only for testing
res.json({
e
})
}
})
这样,即使抛出错误,函数也会终止,并且您应该能够检查它