Node.js 使用命名参数和router.param()进行Express 4路由处理

Node.js 使用命名参数和router.param()进行Express 4路由处理,node.js,express,Node.js,Express,在Express 4 routes中是否有一种干净的方法来处理键/值查询参数 router.route('/some/route?category=:myCategory') 我想检测此路由中是否存在“myCategory”,并使用router.param([name],callback)处理相关逻辑 router.param('myCategory', function(req, res, next, id) { /* some logic here... */ }); 如果我有一

在Express 4 routes中是否有一种干净的方法来处理键/值查询参数

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路由器开箱即用不支持这一点?

Express将
后的属性视为查询参数。因此:

/some/route?mycategory=mine

您必须使用:

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


有关更多信息,请参见此。

因此,在这种情况下,使用
router.param()
查询参数是不可能的?一般经验法则:
/route/:param
/route?query=val
。基于for
router.param()
,我想说不。我将在RESTfull中添加这一点,对您来说,执行
/route/:mycategory
并为可选字段保留查询参数可能更有意义。一个常见的例子是说明分页的
/route/MyCat?startPage=0&endPage=1
。希望能有所帮助。不幸的是,
router.param()
在这里无法工作。我希望用它来验证参数。我知道,没有
router.param()。哦,谢谢你的帮助,托尼!