我正在尝试编写一个简单的GET请求,该请求返回https://hacker-news.firebaseio.com/v0/item/160705.json
我尝试过很多东西,似乎没什么用。 (我在付费的Firebase计划中允许向外部API提出请求)。我编写该函数,然后运行firebase deploy
并执行该函数,但它会超时或抛出另一个错误。
作为测试,这个简单的HTTP调用工作正常:
exports.helloWorld = functions.https.onRequest((request, response) => {
response.send('test');
})
但是当我尝试运行以下命令时,点击HN API,它会超时:
exports.helloWorld = functions.https.onRequest((request, response) => {
request.get('https://hacker-news.firebaseio.com/v0/item/160705.json', function (error, res, body) {
if (!error && res.statusCode == 200) {
console.log(body) // Print the google web page.
}
return response.send("") // this terminates the function
})
})
修改
上述功能的firebase日志说:
Function execution started
Function execution took 60002 ms, finished with status: 'timeout'
我还尝试过其他一些事情,例如:
const options = {
host: 'hacker-news.firebaseio.com',
path: '/v0/item/160705.json'
};
// make the request
exports.hackerNews = functions.https.onRequest(options, (resp) => {
console.log(resp)
});
但是500 Error: could not handle the request
和Referrer Policy: no-referrer-when-downgrade
在firebase函数中写一个简单的GET请求应该不难,所以我必须做一些愚蠢的事情。感谢。
答案 0 :(得分:1)
我明白了:
exports.helloWorld = functions.https.onRequest((req, res) => {
request.get('https://hacker-news.firebaseio.com/v0/item/160705', (error, response, body) => {
if (!error && response.statusCode === 200) {
return res.send(body);
}
return res.send('ERROR: ' + error.message);
})
});
显然你必须在成功或错误时返回一些内容,你只能执行另一个函数,如console.log()。