在微服务开发风格中,云功能与 firebase 应用程序的部署依赖关系是什么?

What is the deployment dependencies of cloud functions vs firebase app in microservice style of development?

  1. 我有一个带有 polymerfire 的 polymer 2.0 web 应用程序的项目,并使用 firebase deploy

  2. 发布到 firebase 托管
  3. 我有另一个项目,它有一个作用于数据库触发器的云函数,并使用 firebase deploy --only functions:updateOnChange

  4. 部署了它
  5. 我有另一个具有云功能的项目,它是一个具有路由映射 GET /fns/registerPOST /fns/registerPUT /fns/register/confirm 的快速应用程序。我已经使用 firebase deploy --only functions:register

  6. 部署了它

我创建了重写规则以将路由 /fns/** 映射到 firebase.json 文件中我的第一个项目(聚合物项目)中的注册云函数。我认为这是我们无法管理来自多个项目的重写规则的当前 firebase 限制。

以下是我在第一个项目(聚合物项目)中的firebase.json

{
  "database": {
    "rules": "database.rules.json"
  },
  "hosting": {
    "public": "build/default/public",
    "rewrites": [
      {
        "source": "/fns/**",
        "function": "fns"
      },
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}

现在我对 /fns/register 的请求被路由到我的 register 云函数,但是我在应用程序中编写的 res.sendFile 不起作用。它总是说

TypeError: path must be absolute or specify root to res.sendFile
    at ServerResponse.sendFile (/user_code/node_modules/express/lib/response.js:410:11)
    at app.get (/user_code/index.js:28:13)
    at Layer.handle [as handle_request] (/user_code/node_modules/express/lib/router/layer.js:95:5)
    at next (/user_code/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/user_code/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/user_code/node_modules/express/lib/router/layer.js:95:5)
    at /user_code/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/user_code/node_modules/express/lib/router/index.js:335:12)
    at next (/user_code/node_modules/express/lib/router/index.js:275:10)
    at expressInit (/user_code/node_modules/express/lib/middleware/init.js:40:5)

我在代码中的日志语句不起作用,即使我发送简单的 res.send(JSON.stringify({ a: 1 }, null, 3));,它仍然会抛出与上述相同的错误。

这意味着,我的代码没有被执行,或者我的库没有被上传到我的云函数。我想了解云功能与应用程序的部署范围/架构/依赖关系。

在 Google IO 2017 中,重复的建议是为应用程序使用微服务开发风格,而不是单一的整体。我在这里遵循的是微服务开发风格,但不知何去何从!

请在这里帮助我。

我遇到的问题不是直接来自 firebase 或其路由。问题出在我的快速应用程序配置上。我修复了同样的问题,一切正常。

此外,我已经从多个项目创建了微服务(云功能),并且能够使用 firebase deploy --only functions:fun1,fun2 独立部署它们,并且范围界定似乎工作得很好。我一直在不同的微服务中使用不同版本的 js 库,到目前为止我没有遇到任何冲突!

虽然我不知道 firebase 部署策略的内部原理。根据我目前的经验,我可以断言,微服务的每个部署都以某种方式被沙盒化,这样其他微服务项目就不会发生冲突!

唯一的问题是路由需要在一个项目中处理,这是可以理解的,因为维护多个路由规则的复杂性以及如果它们支持多个项目支持的重写规则可能会发生冲突。

有高人指正我的理解。