如何从自定义域提供firebase函数?
我有一个网站,我已经在firebase主机上运行,使用谷歌域名。现在,我想显示通过api.mydomain.com等url(而不是默认的firebase域)对firebase函数的所有调用。我怎么可能做到这一点 我在上阅读了firebase教程,还遇到了创建多个站点的问题。那么,有人能告诉我如何设置工作流,使我的站点仍在mydomain.com上运行,但现在通过api.mydomain.com调用我的api吗?目标名称是什么 如果可能的话,我希望所有的请求都显示为对api.mydomain.com的请求,而不是对api.mydomain.com/endpoint的请求,这样就可以对公众隐藏正在命中的端点如何从自定义域提供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
很抱歉,我是新手。假设您的主项目的ID为
示例应用程序
。要将请求作为api.mydomain.com
,您必须使用云函数,该函数使用express
(或其他类似的路由处理程序)
示例应用程序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”
}
]
}
]
}
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
上。