传递参数以表达路由中的中间件

时间:2014-08-25 17:54:04

标签: node.js express parameter-passing middleware

我正在构建一个nodejs + express RESTful服务器,我正在尝试利用中间件来简化特定操作的授权。

我想要实现的是将参数传递给我的授权中间件函数。我想知道是否可以在路由中执行此操作,或者是否必须在中间件功能中提取参数。我希望避免这种行为,因为我已经*哼*在我的URL参数名称中不完全一致。

我想做的是这样的事情:

router.get(
    '/:productId', 
    auth.can_get_this_product(productId), // Pass the productId here
    controller.perform_action_that_requires_authorization
);

但这是不可能的。因为我有其他路径,其中参数的名称可能不相同(即:router.get(/:p_id, auth.can_get_thi...)。我意识到我应该回去确保我的参数名称在任何地方都是一致的,并使用req.param('productId')检索中间件中的参数,但我很好奇它是否可能。

1 个答案:

答案 0 :(得分:1)

好吧,我想你可以传递params哈希密钥,然后使用它。

router.get(
    '/:productId', 
    auth.can_get_this_product('productId'), // Pass the productId *KEY* here
    controller.perform_action_that_requires_authorization
);

//....

function can_get_this_product(productIdKey) {
    var productId = req.params[productIdKey];
    //....
}

但是,当然,我们都知道你应该咬紧牙关并重构这些名字。