【问题标题】:Express 4 route handling with named parameters and router.param()使用命名参数和 router.param() 进行 Express 4 路由处理
【发布时间】:2014-08-05 19:05:28
【问题描述】:

是否有一种简洁的方式来处理 Express 4 路由中的键/值查询参数?

router.route('/some/route?category=:myCategory')

我想检测此路由中是否存在“myCategory”并使用 router.param([name], callback) 来处理相关逻辑。

router.param('myCategory', function(req, res, next, id) {
    /* some logic here... */
});

如果我有像/some/route/:myCategory 这样的路由,上面的'router.param()' 可以正常工作,但如果我使用会失败

router.route('/some/route?category=:myCategory')

我在这里做错了什么,还是 Express 4 路由器不支持开箱即用?

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    Express 将? 之后的属性视为查询参数。所以对于:

    /some/route?mycategory=mine

    你必须使用:

    req.query.mycategoryreq.query['mycategory']

    更多信息请参见examples

    【讨论】:

    • 那么在这种情况下查询参数不能使用router.param()
    • 一般经验法则:/route/:param/route?query=val。基于router.param()docs,我想说不。
    • 我会以 RESTful 方式添加,对您来说,执行 /route/:mycategory 并为可选字段保留查询参数可能更有意义。一个常见的例子是 /route/MyCat?startPage=0&endPage=1 说明分页。希望对您有所帮助。
    • 很遗憾router.param() 在这里不起作用。我希望将它用于参数验证。我知道没有router.param() 也有办法做到这一点,但它会很干净。哦,好吧,谢谢你的帮助,托尼​​!
    猜你喜欢
    • 2023-03-05
    • 2020-10-31
    • 2015-01-30
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 2020-08-21
    • 2011-12-23
    • 1970-01-01
    相关资源
    最近更新 更多