2

我正在使用 firebase 模拟器在我的机器上托管一些 GCF 功能。它们被配置为在 localhost:5001 上运行/托管。这很好用。

我现在在我的应用程序中使用 Google Tasks,我的任务需要调用 GCF 函数。任务不在本地运行,因此我将我的机器设置为通过公共 IP 地址访问并打开端口 5001 以允许该端口上的流量。这个想法是谷歌任务可以调用我机器上的函数,所以我可以正确测试。

我似乎无法让模拟器使用任何外部公共 IP 地址。这是不可能的,或者如果是,我该如何配置?

已更新,这里没有太多要查看的代码...我只是想知道您是否可以将模拟器配置为在公共端口上侦听。这是默认的 firebase.json 文件

   {
     "functions": {
        "predeploy": [
         "npm --prefix \"$RESOURCE_DIR\" run lint"
    ],
    "source": "functions"
  },
  "emulators": {
    "functions": {
      "port": 5001
    },
    "pubsub": {
      "port": 8085
    },
    "ui": {
      "enabled": true
    }
  }
}

在我的研究中,我发现您可以添加“host”属性以允许您的本地网络使用“host”访问模拟器:“0.0.0.0”,所以它看起来像这样:这允许通过我的本地 ip 访问,例如http://192.168.1.216:5001

{
  "functions": {
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint"
    ],
    "source": "functions"
  },
  "emulators": {
    "functions": {
      "port": 5001,
      "host": "0.0.0.0"
    },
    "pubsub": {
      "port": 8085
    },
    "ui": {
      "enabled": true
    }
  }
}

现在,使用我使用 NAT FORWARDING 设置的公共 IP,它无法访问该站点http://108.49.78.181:5001

没有那么多代码,这甚至可能吗?如果是这样,我会喜欢一些如何做到这一点的例子。

4

1 回答 1

3

访问函数应该是这样的

http://localhost:5001/{project_name}/us-central1/{function_name}

{project_name} 必须替换为 .firebaserc 中的项目名称
{function_name} 必须替换为从 js 文件中导出的函数名称

直接请求http://localhost:5001/应该返回Not Found

从外部 IP 访问

使用带有“0.0.0.0”的主机意味着服务器将监听所有IP地址。

默认情况下,firebase 仅接受 localhost,但您可以通过使用 firebase.json 中的 host 选项为每个特定的模拟器更改此设置。

"hosting": {
   "port": 5000,
   "host": "0.0.0.0"
},
"functions": {
   "port": 5001,
   "host": "0.0.0.0"
}

和其他像firestore,auth,ui,database ...

启动模拟器

 firebase emulators:start

不要忘记将您的路由器端口转发到运行模拟器的计算机的本地 ip 并接受防火墙中的端口

于 2021-03-13T20:29:00.217 回答