为什么我所有的firebase云功能都会出现



我正在尝试使用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);
  })
});

相关内容

  • 没有找到相关文章

最新更新