【问题标题】:Express parameterized route conflictExpress 参数化路由冲突
【发布时间】:2015-10-08 04:47:57
【问题描述】:

我在 Express 4.13 应用中有两条路线:

router.get('/:id', function (req, res) {
});

router.get('/new', function(req,res){
});

但是当我尝试访问 /new - 我得到 404,因为没有“新”对象。那么如何更改设置以使我可以访问 /new 路由而不会与 /:id 路由混淆。

谢谢。

【问题讨论】:

    标签: node.js express routing


    【解决方案1】:

    这样做。动态api应该在底部

    router.get('/new', function(req,res){
    });
    
    router.get('/:id', function (req, res) {
    });
    

    【讨论】:

    • 只需将动态 api 方法移到静态方法下方即可解决我的问题。谢谢!
    • 我有一个问题:如果我在两条路由之后都有一个中间件会发生什么? next() 是调用下一个处理程序还是调用导致冲突的处理程序?
    【解决方案2】:

    你需要添加一个函数来检查参数并将/new路由器放在/:id之前:

    var express = require('express'),
        app = express(),
        r = express.Router();
    
    r.param('id', function( req, res, next, id ) {
        req.id_from_param = id;
        next();
    });
    
    r.get("/new", function( req, res ) {
      res.send('some new');
    });
    
    // route to trigger the capture
    r.get('/:id', function (req, res) {
      res.send( "ID: " + req.id_from_param );
    })
    
    app.use(r);
    
    app.listen(3000, function () { })
    

    【讨论】:

    • 非常感谢。在 /:id 之前放置 /new 解决了我的问题。我会记住这个顺序很有意义。
    • 很高兴看到你的回答。
    • 我不是节点专家,这个答案拯救了我的一天!
    猜你喜欢
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多