1
  1. 我有一个带有 polymerfire 的聚合物 2.0 Web 应用程序的项目,并使用发布到 firebase 托管firebase deploy

  2. 我有另一个具有云功能的项目,该功能作用于数据库触发器,并使用firebase deploy --only functions:updateOnChange

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

我已经创建了重写规则,以将路由映射/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 中,反复的建议是使用微服务风格的应用程序开发,而不是单一的单体。我在这里关注的是微服务开发风格,但无处可去!

请在这里帮助我。

4

1 回答 1

1

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

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

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

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

有更深入了解的人可能会纠正我的理解。

于 2017-08-06T17:04:19.577 回答