重新注册节点路由



我想知道注册后的路由是否可以更改。我正在启动一个网站,一旦提出请求,我需要检查该网站是否已启动。如果是,那么我希望实际的网站呈现。否则,我需要显示即将到来的页面。由于发布会将在现场活动中进行,我需要改变价值。因此,例如,我向主页提出请求,网站尚未启动,那么它应该显示即将到来的页面,如果是,那么它显示主页。现在,我已经初始化了一个布尔值isLaunched=false。当客人启动它时,我将值更改为true,我想呈现整个网站。为此,我使用了if-else条件词-例如:

if(!isLaunched){

要用于启动页面的一些路由。

app.get("*",function(req,res){
res.render("coming-soon");
});
}else{
app.get("/",function(req,res){
res.render("home");
});

所有路线

}

现在,为了进行此更改,我将它们封装在一个函数中,以便对它们进行更新。

函数updateRoutes(({

if(!isLaunched){

要用于启动页面的一些路由。

app.get("*",function(req,res){
res.render("coming-soon");
});
}else{
app.get("/",function(req,res){
res.render("home");
});

所有路线

}

}

所以现在,在我检查网站是否启动后,我可以调用这个函数来注册。然而,这不起作用。它仍然显示所有路线的即将到来的页面。

isLaunched=true;
updateRoutes();

请帮我做这个。我不知道为什么这不起作用。路线可以重新注册吗?请提出一个可能的解决方案。

提前谢谢。祝你今天愉快!

为此,您可以使用一个中间件来捕获所有请求,然后只有在isLaunchedtrue的情况下才允许请求进入其适当的处理程序。

const app = express();
app.use('*', (req, res, next) => {
if (isLaunched || req.path === '/coming-soon') {
return next()
}
res.redirect('/coming-soon')
// You can also render if you want
// res.render('coming-soon')
})
// Other routes here

编辑

要定义isLaunched为true时应该可访问的路由,您可以在中间件之后定义这些路由。如果您还没有在中间件中调用next()方法,它就不会进入下一个处理程序。因此,如果isLaunched不是真的,你永远不会调用next()

app.get('/login', handler)
app.get('/register', handler)

所以基本上你知道如何定义你通常会定义一条路线。

编辑2:

如果您希望在isLaunched为false时访问多个路由,则可以在使用中间件之前定义这些路由。

在Express中,不支持更改、编辑或删除您已注册的路由。这将有可能通过黑客攻击Express中的内部(未记录的(数据结构来实现。

更典型的情况是,您只需创建一个内部有自己的条件逻辑的路由处理程序,这样路由处理程序就可以决定应该在路由处理程序中应用哪个逻辑。因此,与其有两个路由处理程序并切换它们,不如有一个永久路由处理程序,它有自己的条件逻辑来决定在当前状态下如何操作。

如果您想要一个可以响应所有页面的路由,那么您只需要使用app.use()中间件。

// middleware that sends coming-soon page if not launched yet
app.use(function(req, res, next){
if (!isLaunched) {
// don't go to any other route handlers
res.render("coming-soon");
} else {
// continue processing to other route handlers
next();
}
});
// other routes that get hit if isLaunched is true
app.get("/",function(req, res){
res.render("home");
});

最新更新