【问题标题】:express route with param overriding the static route使用参数覆盖静态路由的快速路由
【发布时间】:2017-04-04 07:10:30
【问题描述】:

我有如下代码

app.get('/all', callback2);
app.get('/:id', callback);

/:id 正在覆盖路由 /all

【问题讨论】:

  • 如果您在 express 4+ 上,您在事务中声明它们的顺序。此外,从语义上讲,大多数人不会有 /all 路由,只需使用 / 作为等效列表
  • 翻转订单是否有效?如果不是,那可能是 express 解析路由参数的方式。
  • @Paul 这是响应 { 消息:“在路径“_id”处为值“all”转换为 ObjectId 失败”,名称:“CastError”,种类:“ObjectId”,值:“all ",路径:"_id" }
  • @JimBaldwin 翻转订单不起作用。

标签: node.js express routes


【解决方案1】:

即使不是最好的解决这个问题的好方法是定义

app.get('/all', callback2);

之前

app.get('/:id', callback);

现在路由器会先检查第一个路由,然后再检查其他路由

【讨论】:

    【解决方案2】:

    除了避免使用可能不明确的路线之外,我能想到的唯一解决方案是实现这样的一条路线:

    app.get('/:id', function(req, res) {
        if (req.params.id === 'all') {
            // do what you would do for /all
        } else {
            // do what you do for /:id
        }
    }
    

    【讨论】:

    • 这是个好主意。但我将“所有”路由重命名为“/”并解决了问题。
    • 既然这也是事实上的标准,那可能是一个不错的结果。
    猜你喜欢
    • 2016-04-14
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2015-01-29
    • 2017-08-16
    • 1970-01-01
    相关资源
    最近更新 更多