express.js中的虚假路由

时间:2017-03-17 10:41:08

标签: javascript node.js express routing async.js

我正在尝试使用以下过滤器来转移包但它失败了: 我使用express.js构建路由:

app.get('/billdetails/:year/:month/:phoneId', function (req, res, next) {
    var db = req.db;
    var year = req.params.year;
    var month = req.params.month;
    var phoneId = req.params.phoneId;
    async.parallel({...})

app.get('/billdetails/lastinvoices/:number/:limit', function (req, res, next) {
    var db = req.db;
    var number = req.params.number;
    var limit = req.params.limit;
    async.parallel({...})

因此,当我请求第一个URL时,一切正常,但是当我尝试请求第二个路径时,我得到的响应与第一个路径相同。

有人知道为什么会这样吗?

问候并感谢你。

1 个答案:

答案 0 :(得分:0)

您的第一条路线与第二条路线的参数相同。
这意味着当您请求第二条路线时,它将首先测试第一条路线,导致之前定义的路线。

这意味着如果您使用以下请求请求路由2: url/billdetails/lastinvoices/12/123

您将使用以下参数路由到第一条路线:

year:    "lastinvoices"
month:   12
phoneId: 123 

您可以在之前和之后定义第二条路线,让它先尝试。但我并不是百分之百确定打赌它会一直有效是安全的。

就个人而言,我会重命名路线,或者从正常的get-param中获取limit参数,即:url/billdetails/lastinvoices/1?limit=1。 所以第二条路线定义为:
/billdetails/lastinvoices/:number