Firebase使用单页应用程序实现自定义域功能
我有一个Firebase托管的单页应用程序 我还有3个Firebase功能(联系人、计划、功能),应用程序和外部来源会请求这些功能 我的应用程序有一个自定义域,我想通过它访问我的功能 这是我当前的Firebase使用单页应用程序实现自定义域功能,firebase,google-cloud-functions,single-page-application,firebase-hosting,Firebase,Google Cloud Functions,Single Page Application,Firebase Hosting,我有一个Firebase托管的单页应用程序 我还有3个Firebase功能(联系人、计划、功能),应用程序和外部来源会请求这些功能 我的应用程序有一个自定义域,我想通过它访问我的功能 这是我当前的firebase.jsonconfig { "hosting": { "public": "www", "ignore": ["firebase.json", "**/.*", "**/node_modules/**"], "rewrites": [ {
firebase.json
config
{
"hosting": {
"public": "www",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
}
}
因此,目前所有流量都流向我的应用程序,路由通过我的SPA处理。目前必须通过cloudfunctions.net
URL访问我的函数,这并不理想
如何将URL重写条目添加到此配置中,以便可以通过自定义域访问我的功能,并且我的单页应用程序可以处理其余的路由
我为功能
端点尝试了以下操作:
"rewrites": [
{
"source": "/features/**",
"function": "features"
},
{
"source": "!/features/**",
"destination": "/index.html"
}
]
其中,在我的函数index.js
中,我有:
。。。
exports.plans=functions.https.onRequest(plansApi);
exports.features=functions.https.onRequest(featuresApi);
exports.contact=functions.https.onRequest(contactApi);
但是我收到了404无法获得/features/123
作为响应?一些事情:
featuresApi
处理程序与完整URL路径匹配(例如/features/123
而不是/123
)。Firebase主机将完整路径转发到函数,而不仅仅是**
部分/功能/**
用于第二个重写源代码<代码>**应该可以,因为如果它与/features/**
匹配,它将已经与第一次重写匹配并解析到函数根据错误消息,似乎(1)是罪魁祸首。Brilliant,它是#1,这是有文档记录的吗?我刚刚错过了它?谢谢Michael,我也有同样的问题,自定义域在每个函数中添加完整URL路径后开始工作,如您在p-1中所述。是否有任何解决方法,或者您是否有任何建议使*.cloudfunctions.net上的旧URL保持向后兼容?我在示例代码中添加了一个要点,比如如果你有一个Express应用程序。。。您的POST请求可能是:
/api/user/:task
,您的Express应用程序在变量appAPIUser
中定义,并按如下方式导出:exports.appAPIUser=functions.https.onRequest(appAPIUser)
您应该有一个重写规则,用于像这样命名的主机(包括正确的参数):{“source”:/api/user/**”,“function”:“appAPIUser”}
。在服务器端,如果您使用的是cookie会话(NPM),您可以执行以下操作:req.sessionOptions.domain=req.hostname=='us-central1-{{project name}}.cloudfunctions.net'?'{project name}}.web.app':req.hostname;
和req.sessionOptions.secure=req.secure
。对我来说很好。