2017-06-29 59 views
0

我目前正在使用node.js工作。 我陷入了一个特定的问题。使用express(app.get(“..”,func))添加所有路由 后,我最终得到一个中间件, 捕获所有请求并重定向到404页。NodeJS:以后如何添加路由(中间件后)

现在的事情是,当我在服务器运行期间之后添加路由时,中间件 不关心新路由。

例如:

app.get("/home", function(_, res) { 
    res.send("home"); 
}) 

app.get("/faq", function(_, res) { 
    res.send("faq"); 
}) 

app.use(function(_, res) { 
    res.send("404"); 
}); 

// e.g. 10 min later.. 

app.get("/team", function(_, res) { 
    res.send("team"); 
}) 

所以我可以访问/ home和/ FAQ但在10分钟请求页/队后,我重定向到404页。

有没有人知道解决方案? Im对nodejs来说相当新颖..

+0

从你的措辞,你听起来像你可能没有尝试重新启动节点/快递过程? –

+0

很可能您正在添加的路由*在您的404处理程序之后添加*,因此它永远无法到达,因为到达404处理程序的任何内容都会收到404. –

+0

您的app.use代码将发送404响应,所以所有之后的代码将不会执行。只需在代码结尾处留下app.get(“/ team”,function(_,res){res.send(“team”); }),并且一切都会正常 –

回答

0

尽管动态地添加路由听起来不是一个好主意,但这里有一个解决方法:在404处理程序之前添加一个(空的)Router实例,并将新路由添加到该路由器而不是app

let router = express.Router(); 
app.use(router); 

app.use(function(_, res) { 
    res.send("404"); 
}); 

// e.g. 10 min later.. 
router.get("/team", function(_, res) { 
    res.send("team"); 
}) 
+0

我需要动态添加路由,因为一个大厅系统(例如:/ lobby/xsfr)。非常感谢你! – reByte

+1

@reByte听起来像你实际需要的是一个'/ lobby'路由,它接受一个参数,而不是附加路由。例如'/ lobby /:id' –

+0

是的,我同意@KevinB的说法。 – robertklep

相关问题