在ExpressJS中将参数从路由器传递到控制器

我有一个定义如此的路线

router.route('/:id/organisers').get(HackathonControllers.getHackathonRoles());

现在, getHackathonRoles是一个定义如下的控制器:

 function getHackathonRoles(role, req, res, next) { console.log(role); res.status(200).json({ message: `Successfully updated Hackathon ${hackathonId}, published status updated to ${hackathonPublishedStatus}` }) } 

我理想要做的是通过定义多个路由器端点来传递angular色。 就像是:

router.route('/:id/organisers').get(HackathonControllers.getHackathonRoles(role='organiser'));

router.route('/:id/volunteer').get(HackathonControllers.getHackathonRoles(role='volunteer'));

所以基本上我想重用getHackathonRoles方法,并希望避免为不同的angular色重写相同的方法。 理想情况下,我应该能够在控制器中的console.log(role)

截至目前,这失败了,我得到的错误:

router.route('/:id / organizers')。get(_hackathonController2.default.getHackathonRoles(role ='organizer'));

我该如何解决这个问题,并保持干爽? 我不想将参数合并到像/:id/?这样的端点中 参数就像role=organiserrole=volunteer

get函数需要使用签名(req, res, next)进行callback,所以你不能只传递任意参数,并期望它的工作。 相反,你必须调用一个自己返回这个函数的函数。

 function getHackathonRoles(role) { console.log(role); return function(req, res, next) { // do something with the role variable // send a response using res.status(...).json(...) }); } router.route('/:id/organisers').get(getHackathonRoles('organiser')); router.route('/:id/volunteer').get(getHackathonRoles('volunteer'));