ExpressJS - 同时使用基于参数的路由和绝对路由

ExpressJS - Using both parameter based route and absolute route

我定义了以下路由。

基于参数的路由

app.get('/:id',function(req,res){
   //Use the req.params.id
});

绝对路线

app.get('/login', function(req,res){
   //Render login page
});

对 /login 路由的 GET 请求永远不会到达,因为 express 将它与第一条路由 (/:id) 匹配。我如何共存基于参数的路由和绝对路由?

路线的顺序很重要。

由于您先有一条更通用的路由,因此它会被调用,而不是您不太通用的路由(登录)。

你应该把登录路由放在id路由上面

app.get('/login', function(req,res){
   //Render login page
});

app.get('/:id',function(req,res){
   //Use the req.params.id
});

是解决问题最简单高效的方法。但是,为了参考,您还可以使用另一种方法:

app.get('/:id', function(req, res, next) {
    if (req.params.id === "login") {
        return next(); // skip to the next route handler
    }

   // response code here
});

app.get('/login', function(req, res){
   // response code here
});