2017-08-07 147 views
2

我无法让我的.get()工作。我对.use()和.get()的理解是.use()用于我们想要应用的路径,而.get()更具体(选择特定的URL来应用)。使用Express指定特定路径

In我的例子中,我想显示'适用于所有页面'的任何页码,但是如果我输入'/ 28',我想让.get消息显示出来。现在,即使我去/ 28时,我也会收到.use消息。

router.use('/:id', function(req, res){ 
    console.log("Things " + Date.now()); 
    res.send('Applies to all pages ' + req.params.id); 

}); 


router.get('/28', function(req, res){ 
    res.send('Secret 28 page'); 
}); 
+0

使用是为整个应用程序,并得到是一个特定的API,这意味着获取路径将被追加到使用路径。例如,您的代码将匹配路径'/ {some_id/28}'到您的get方法。如果你想以28的“适用于所有页面”作为唯一的例外来响应任何事情,只需在你的if语句中获得('/:id',()=> {如果28做了某事, )并摆脱使用,默认情况下使用将是'/'。 – Jason

回答

1

use方法用于从您的快递app或快递router使用所有http动词到某个path的动词。在使用use时,您必须考虑优先顺序。在这里,发生的事情是,您已经在您的动态路由器中使用了use作为router.use('/:id', ...),这也需要get请求。

您可以先使用get路由器,这样它只需要get请求/28并将所有未处理的请求转移到其他路径。

router.get('/28', function(req, res){ 
    res.send('Secret 28 page'); 
}); 

router.use('/:id', function(req, res){ 
    console.log("Things " + Date.now()); 
    res.send('Applies to all pages ' + req.params.id); 

}); 
1

docs

您在其中定义与router.use中间件(顺序)是非常重要的。它们是按顺序调用的,因此顺序定义了中间件的优先级。

在你的例子中,你的'/:id'将优先匹配时。

因此交换订单来修复您的示例,并且通常首先定义更具体的处理程序。

1

.use()适用于无论HTTP动词所有的路径,所以你的情况下,它适用于GET,POST,PUT和所有以/:id路径和app.get("/28")启动其他请求是这样的要求