首页 > 解决方案 > 当 http firebase-functions 在模拟器下运行和部署时,有没有办法规范 request.url 的差异

问题描述

对于 Firebase 工具 6.9.2:

当使用firebase emulators:start --only functions, hosting通过托管重写规则调用函数的位置时,使用与将函数部署到云时不同的请求 URL 路径前缀调用函数。例如,给定一个 firebase.json 托管代码段,例如:

    {
      "target": "myapi",
      "public": "./dist/hosting/myapi",
      "rewrites": [{
          "source": "/api/myapi/*",
          "function": "myapi"
        }
      ]
    },

部署到 firebase 时,myapi将使用以下开头的请求 url 调用该函数: /api/myapi/

但如果在模拟器中运行,它最终看起来像: /[firebase-project-id]/[firebase-region]/myapi/api/myapi/

如果函数不查看请求路径,这没有什么区别,但在我的情况下,该函数是具有路由的 express(koa)处理程序的处理程序,因此了解基本路径很重要。

我查看了 process.env 中是否有任何可用的内容,但只有 GCLOUD_PROJECT 名称和一些 FIREBASE_CONFIG 参数。

我找不到任何有关对 firebase.json 中函数的重写进行更高级控制的文档。

我可以通过设置环境变量以匹配函数在本地运行的前缀并在请求处理期间将其考虑在内,从而在测试中解决它。不幸的是,在模拟器启动并记录函数 url 之后,请求 url 前缀才可用。

我希望找到更好的测试解决方案。

标签: firebasegoogle-cloud-functionsfirebase-hostingfirebase-cli

解决方案


结果证明这是一个错误,并且在我的 firebase-tools 6.10.0 中已解决。

https://github.com/firebase/firebase-tools/issues/1279

此相关问题也已打开:

https://github.com/firebase/firebase-tools/issues/1312


推荐阅读