使用Firebase Cloud功能表达路由和中间件

时间:2018-09-13 17:41:28

标签: express routing google-cloud-functions middleware

问题

如何在Firebase Cloud Functions中使用Express?

期望

我希望使用已设置的两个URL在控制台日志中看到"Hello from Express on Firebase!"

为什么?我的理解是,"*"表示所有请求的路线都应response.send("Hello from Express on Firebase!");

app.get("*", (_request, response) => {
  response.send("Hello from Express on Firebase!");
});

问题

使用时,https://us-central1-myapp.cloudfunctions.net/helloWorld在日志中得到了预期的Hello from Firebase!。我还应该看到"Hello from Express on Firebase!"吗?

使用https://us-central1-myapp.cloudfunctions.net/api时,我会得到404 error

  

URL https://us-central1-myapp.cloudfunctions.net/api是问题所在。在下面的答案中查看原因。

代码

// Express
import express = require("express");
const app = express();
const cors = require("cors")({
  origin: "*"
});
app.use("*", cors);

// Firebase Functions SDK
import functions = require("firebase-functions");

app.get("*", (_request, response) => {
  response.send("Hello from Express on Firebase!");
});

exports.api = functions.https.onRequest(app);

exports.helloWorld = functions.https.onRequest((_request, response) => {
  response.send("Hello from Firebase!");
});

tl; dr

我希望完成的一个示例是here,但是没有一个代码示例对我有用。我得到一个404 error

Express Documentation here展示了一个类似的HelloWorld示例,但我混淆了Firebase如何代替app.listen(3000, () => console.log('Example app listening on port 3000!'))

cors在我的示例代码中工作正常吗?尽管我得到了预期的响应和日志,但Chrome控制台警告:Cross-Origin Read Blocking (CORB) blocked cross-origin response https://appengine.google.com/_ah/lo....

我有一个Slack应用程序正在访问这些URL(我也用chrome访问了它们)。最终,我想在我的Google Cloud Functions中使用Botkit中间件。我尚未掌握Express app.use()app.get()

的正确设置

1 个答案:

答案 0 :(得分:1)

答案

/api实际上是路径的一部分时,我把它当作函数来犯了一个简单的错误。

通过将此URL与结尾/一起使用

https://us-central1-myapp.cloudfunctions.net/api/

我现在正在使用Express的路线和功能。