我正在尝试使用Firebase Cloud函数来创建对外部JSON API的代理。但是现在我只是想设置所有设置。
我写了此功能:
exports.helloWorld = functions.https.onRequest((request, response) => {
request.get('http://www.google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // Print the google web page.
}
})
});
i然后运行firebase函数模拟器并运行
curl http://localhost:5000/<project-id>/us-central1/helloWorld
它返回一条消息,说该功能是触发的,开始执行,但随后它坐在那里并旋转直到最终它。
{"error":{"code":500,"status":"INTERNAL","message":"function execution attempt timed out"}}
我不确定我在做什么错。
........
编辑
此功能正常工作:
exports.helloWorld = functions.https.onRequest((request, response) => {
response.send('test');
})
带有云功能,HTTPS类型函数有义务向客户端编写结果,以指示该函数已执行。在编写结果之前,假定该功能仍在运行某些异步工作。
因此,当您的请求完成后,即使是空的,您也应该发送一些响应。不幸的是,您已经用另一个对象遮盖了主要的response
对象,因此您可能应该重命名其中一个:
exports.helloWorld = functions.https.onRequest((request, response) => {
request.get('http://www.google.com', function (error, res, body) {
if (!error && res.statusCode == 200) {
console.log(body) // Print the google web page.
}
return response.send("") // this terminates the function
})
})
https函数直到您在响应上发送某些内容后才完成。这是一个示例,仅将代理请求中的内容输送为输出(我必须更改变量的名称以避免阴影:
exports.helloWorld = functions.https.onRequest((req, res) => {
request.get('http://www.google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
return res.send(body) // Print the google web page.
}
return res.send('ERROR: ' + error.message);
})
});