2016-11-08 73 views
0

符合express3的书。在以下情况下,即使下一个路线也与该模式匹配,http://localhost:3000/abcd将始终打印“abc *”。路线优先顺序表3和4

我的问题是以同样的方式工作express4?

app.get('/abcd', function(req, res) { 
    res.send('abcd'); 
}); 
app.get('/abc*', function(req, res) { 
    res.send('abc*'); 
}); 

颠倒顺序将其打印“ABC *”:

app.get('/abc*', function(req, res) { 
    res.send('abc*'); 
}); 
app.get('/abcd', function(req, res) { 
    res.send('abcd'); 
}); 
+0

在这两种表达3级4的版本与被请求匹配的第一个路由处理路线获胜。 – undefined

+0

谢谢,那是旧书或错误。谢谢 ! – stackdave

回答

0

该路由匹配的第一个路由处理程序是被调用的一个。这就是Express在所有最新版本中的工作原理。你通常应该从更具体到不那么具体的路线指定你的路线,然后更具体的路线将首先匹配,不太具体的路线将会抓住其余的路线。

如果你想有一个处理程序来查看所有比赛,然后传给其他处理的事情,你一般会使用中间件:

// middleware 
app.use("/abc*", function(req, res, next) { 
    // process request here and either send response or call next() 
    // to continue processing with other handlers that also match 
    next(); 
});