firebase从url中删除函数名
我有这样一个简单的express应用程序。firebase从url中删除函数名,firebase,express,google-cloud-platform,routes,google-cloud-functions,Firebase,Express,Google Cloud Platform,Routes,Google Cloud Functions,我有这样一个简单的express应用程序。 const express = require("express"); var app = express(); app.get("/", (req, res)=>{ ...handle request... }); ... exports.app = functions.https.onRequest(app); 我部署在火力基地。当我部署它时,它会通过函数名创建一个新路由,如下所示:ht
const express = require("express");
var app = express();
app.get("/", (req, res)=>{
...handle request...
});
...
exports.app = functions.https.onRequest(app);
我部署在火力基地。当我部署它时,它会通过函数名创建一个新路由,如下所示:https://us-central1-[projectname].cloudfunctions.net/app
这是因为我把
exports.app=functions.https.onRequest(app)代码>
那么,如果最后没有/app
,我如何部署并使其工作呢?
我需要这个,因为我的前端上的引用使用了“/login”
之类的路由,而在这种情况下,由于它添加了app
要求所有路由都像“/app/login”
我甚至尝试了导出默认应用程序,但没有成功
如何在不使用函数名作为路由的情况下进行部署?无法从托管在cloudfunctions.net
上的URL的第一部分删除/[exportname]
,因为这是触发函数的方式
理想情况下,您不需要提供来自cloudfunctions.net
域的资源,而是将您的应用程序放在可以使用https://yourapp.example.com/login
这将很好地与Express配合使用
但是,如果您希望调用https://us-central1-[projectname].cloudfunctions.net/app/login
并使其行为如同从https://us-central1-[projectname].cloudfunctions.net/login
,您可以使用条件URL重写。下面的示例将从URL中删除/app
,如果且仅当主机名以cloudfunctions.net
结尾,并且URL也以“/app”
开头,然后移交给其他路由
从“express”导入express;
函数removePathForCloudFunctionsDomain(路径){
返回函数(req、res、next){
const rawUrl=req.url;//隐藏原始url
//如果不在cloudfunctions.net上或路径不匹配,则不执行任何操作
if(!req.hostname.endsWith(“cloudfunctions.net”)| |!rawUrl.startsWith(path)){
返回next();
}
//如果在这里,请修剪请求URL的路径
req.url=req.originalUrl=rawUrl.slice(path.length);
//移交给其他app.get()、app.use()等。
下一条(“路线”);
}
}
常量app=express();
应用程序使用(removePathForCloudFunctionsDomain(“/app”);
/*其他路线*/
出口应用程序;
无法从托管在cloudfunctions.net
上的URL的第一部分删除/[exportname]
,因为这是触发函数的方式
理想情况下,您不需要提供来自cloudfunctions.net
域的资源,而是将您的应用程序放在可以使用https://yourapp.example.com/login
这将很好地与Express配合使用
但是,如果您希望调用https://us-central1-[projectname].cloudfunctions.net/app/login
并使其行为如同从https://us-central1-[projectname].cloudfunctions.net/login
,您可以使用条件URL重写。下面的示例将从URL中删除/app
,如果且仅当主机名以cloudfunctions.net
结尾,并且URL也以“/app”
开头,然后移交给其他路由
从“express”导入express;
函数removePathForCloudFunctionsDomain(路径){
返回函数(req、res、next){
const rawUrl=req.url;//隐藏原始url
//如果不在cloudfunctions.net上或路径不匹配,则不执行任何操作
if(!req.hostname.endsWith(“cloudfunctions.net”)| |!rawUrl.startsWith(path)){
返回next();
}
//如果在这里,请修剪请求URL的路径
req.url=req.originalUrl=rawUrl.slice(path.length);
//移交给其他app.get()、app.use()等。
下一条(“路线”);
}
}
常量app=express();
应用程序使用(removePathForCloudFunctionsDomain(“/app”);
/*其他路线*/
出口应用程序;