如何从自定义域提供firebase函数?

如何从自定义域提供firebase函数?,firebase,google-cloud-functions,firebase-hosting,Firebase,Google Cloud Functions,Firebase Hosting,我有一个网站,我已经在firebase主机上运行,使用谷歌域名。现在,我想显示通过api.mydomain.com等url(而不是默认的firebase域)对firebase函数的所有调用。我怎么可能做到这一点 我在上阅读了firebase教程,还遇到了创建多个站点的问题。那么,有人能告诉我如何设置工作流,使我的站点仍在mydomain.com上运行,但现在通过api.mydomain.com调用我的api吗?目标名称是什么 如果可能的话,我希望所有的请求都显示为对api.mydomain.co

我有一个网站,我已经在firebase主机上运行,使用谷歌域名。现在,我想显示通过api.mydomain.com等url(而不是默认的firebase域)对firebase函数的所有调用。我怎么可能做到这一点

我在上阅读了firebase教程,还遇到了创建多个站点的问题。那么,有人能告诉我如何设置工作流,使我的站点仍在mydomain.com上运行,但现在通过api.mydomain.com调用我的api吗?目标名称是什么

如果可能的话,我希望所有的请求都显示为对api.mydomain.com的请求,而不是对api.mydomain.com/endpoint的请求,这样就可以对公众隐藏正在命中的端点


很抱歉,我是新手。

假设您的主项目的ID为
示例应用程序
。要将请求作为
api.mydomain.com
,您必须使用云函数,该函数使用
express
(或其他类似的路由处理程序)

  • 使用Firebase CLI为您的项目创建辅助站点(id为
    示例应用程序api
    示例api
    ,等等)
  • firebase托管:站点:创建示例应用程序api
    
  • 将您的托管目标连接到您的资源
  • firebase目标:应用托管应用程序示例应用程序
    firebase目标:应用托管api示例应用程序api
    
  • 修改您的
    firebase.json
    文件以适应上述目标
  • {
    “托管”:[
    {
    //应用程序链接到示例应用程序,用作mydomain.com
    “目标”:“应用程序”,
    //此文件夹的内容已部署到网站“示例应用程序”
    “公共”:“公共”,
    //…其他设置。。。
    },
    {
    //api链接到示例应用程序api,用作api.mydomain.com
    “目标”:“api”,
    //此文件夹的内容已部署到网站“示例应用程序api”
    //这里的任何文件都将返回,而不是调用您的云函数。
    //建议内容:
    //-favicon.ico(书签、链接等的网站图标)
    //-robots.txt(机器人和刮刀的说明)
    //可选内容:
    //-service-worker.js(空文件,用于防止触发云功能)
    //-humans.txt(关于您/您的公司是谁以及如何报告错误的详细信息)
    “公共”:“api静态资源”,
    //…其他设置。。。
    “重写”:[
    {
    //将所有调用重定向到名为“api”的函数
    “来源”:“**”,
    “函数”:“api”
    }
    ]
    }
    ]
    }
    
  • 使用Firebase CLI部署
    api
    主机配置
  • firebase部署--仅托管:api
    
  • 为您的项目打开,单击
    示例应用程序api的“查看”,然后单击下面的“自定义域”

  • 您现在应该能够通过在
    api.mydomain.com
    上调用云函数来触发它

  • api.mydomain.com/getPost?id=someId
    api.mydomain.com/favicon.ico
    api.mydomain.com/robots.txt
    
    非常感谢!这是一个很棒的答案!我只是在第3步中有点困惑:我会为node.js函数修改firebase.json文件吗?或者对于实际的网站?这是部署代码的项目目录中的
    firebase.json
    。如果您正在为托管站点使用名为
    firebase.json
    的文件(其中包含您的
    appId
    databaseURL
    等),firebase托管会在
    /\uuuu/firebase/init.json
    /\uu/firebase/init.js
    为您创建配置文件(有关更多信息,请参阅)感谢您的澄清-但我已经通过后端代码直接从另一个部署,而我的实际网站从一个单独的。在这种情况下,我是否更改网站或firebase函数的firebase.json文件?从您所描述的内容来看,这是针对网站的,对吗?当您使用
    firebase deploy
    时,项目
    firebase.json
    文件(位于
    $project\u DIR/firebase.json
    )用于配置部署设置。虽然它用于配置项目,但实际上并没有与代码一起部署。在您的Cloud Functions文件夹中(默认值:
    $PROJECT\u DIR/Functions
    ),您不需要任何
    firebase.json
    ——您只需使用
    admin.initializeApp()
    (无参数)。在您的托管文件夹(默认值:
    $PROJECT\u DIR/public
    )中,您不需要
    firebase.json
    文件,因为上面的
    init.json
    /
    init.js
    会为您处理它。如果您有两个不同的项目目录,然后将上述更改放到部署托管站点的
    firebase.json
    上。