Javascript 重新注册节点路由

Javascript 重新注册节点路由,javascript,node.js,ejs,Javascript,Node.js,Ejs,我想知道一条路线一旦登记,是否可以更改。我正在启动一个网站,一旦提出请求,我需要检查该网站是否已启动。如果是,那么我希望实际的网站呈现。否则,我需要显示即将到来的页面。因为发射将在现场进行,所以我需要更改值。例如,我请求主页,网站还没有启动,那么它应该显示即将到来的页面,如果是,那么它显示主页。现在,我初始化了一个布尔值isLaunched=false。当来宾启动它时,我将该值更改为true,并希望呈现整个网站。为此,我使用了if-else条件-例如: if(!isLaunched){ if(

我想知道一条路线一旦登记,是否可以更改。我正在启动一个网站,一旦提出请求,我需要检查该网站是否已启动。如果是,那么我希望实际的网站呈现。否则,我需要显示即将到来的页面。因为发射将在现场进行,所以我需要更改值。例如,我请求主页,网站还没有启动,那么它应该显示即将到来的页面,如果是,那么它显示主页。现在,我初始化了一个布尔值isLaunched=false。当来宾启动它时,我将该值更改为true,并希望呈现整个网站。为此,我使用了if-else条件-例如:

if(!isLaunched){
if(!isLaunched){
…将用于启动页面的某些路由

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

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

}else{
  app.get("/",function(req,res){
    res.render("home");
  });
…所有路线

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

函数updateRoutes(){

…将用于启动页面的某些路由

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

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

}else{
  app.get("/",function(req,res){
    res.render("home");
  });
…所有路线

}
}
}

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

isLaunched=true;
updateRoutes();
 
请帮我做这个。我不知道为什么这样不行。可以重新注册路线吗?请提出一个可能的解决方案

先谢谢你。
祝你今天愉快

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

const-app=express();
应用程序使用(“*”,(请求、恢复、下一步)=>{
如果(isLaunched | | req.path==='/即将推出){
返回下一个()
}
res.redirect(“/即将到来”)
//如果需要,也可以渲染
//res.render(“即将到来”)
})
//这里还有其他路线吗
编辑 要定义当
isLaunched
为true时应该可以访问的路由,您可以在中间件之后定义这些路由。如果您没有在中间件中调用
next()
方法,它将不会转到下一个处理程序。因此,如果
isLaunched
为非真,则永远不会调用
next()

app.get('/login',handler)
app.get('/register',处理程序)
所以基本上你知道如何定义一条路线

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

为此,可以使用捕获所有请求的中间件,然后仅在isLaunched为true时才让请求转到其适当的处理程序

// 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");
});
const-app=express();
应用程序使用(“*”,(请求、恢复、下一步)=>{
如果(isLaunched | | req.path==='/即将推出){
返回下一个()
}
res.redirect(“/即将到来”)
//如果需要,也可以渲染
//res.render(“即将到来”)
})
//这里还有其他路线吗
编辑 要定义当
isLaunched
为true时应该可以访问的路由,您可以在中间件之后定义这些路由。如果您没有在中间件中调用
next()
方法,它将不会转到下一个处理程序。因此,如果
isLaunched
为非真,则永远不会调用
next()

app.get('/login',handler)
app.get('/register',处理程序)
所以基本上你知道如何定义一条路线

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

在Express中,不支持更改、编辑或删除已注册的路由。这可以通过在Express中对内部(无文档记录的)数据结构进行黑客攻击来实现

// 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");
});
更典型的是,您只需创建一个路由处理程序,其中包含自己的条件逻辑,以便路由处理程序决定应该在路由处理程序中应用哪些逻辑。因此,与其有两个路由处理程序并切换它们,不如有一个永久路由处理程序,其中有自己的条件逻辑,以决定在给定当前状态下如何操作

如果您想要一个能够响应所有页面的路由,那么您只需使用
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");
});

在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");
});

非常感谢你,兄弟。我用了你的建议,效果很好。非常感谢。如果你能帮我做另一件事,我很乐意,我希望在(!isLaunched)块中有路由处理程序。所以我不想只是渲染即将到来的页面,如果它没有启动的话。我希望有一些路线,例如/launch和其他一些有助于启动的路线。因此,当一个人访问任何其他未启动的页面时,该页面应显示即将启动,但特定的/启动路径将呈现另一个页面,该页面用于更改变量。@IbrahimKhalil-只需定义这些路径即可。将它们放在上述中间件之前,然后在它们内部使用
if(!isLaunched)
来确定要执行的操作。@IbrahimKhalil-如果这已经回答了您的问题,然后你可以通过点击答案左边的复选标记来向社区表明这一点,并通过遵循正确的程序为自己赢得一些声誉点数。非常感谢兄弟。我用了你的建议,效果很好。Tha