我正在构建一个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')
检索中间件中的参数,但我很好奇它是否可能。
答案 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];
//....
}
但是,当然,我们都知道你应该咬紧牙关并重构这些名字。