我有一条这样定义的路线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}`
})
}
我理想地要做的是通过定义多个路由器端点来传递角色。就像是:
router.route('/:id/organisers').get(HackathonControllers.getHackathonRoles(role='organiser'));
和
router.route('/:id/volunteer').get(HackathonControllers.getHackathonRoles(role='volunteer'));
因此,基本上我想重用
getHackathonRoles
方法,并希望避免针对不同角色重写同一方法。理想情况下,我应该能够在控制器中使用console.log(role)
。到目前为止,这失败了,我得到了错误:
router.route('/:id / organisers')。get(_hackathonController2.default.getHackathonRoles(角色
='组织者'));
我该如何解决并使它保持干态?我不想将参数合并到端点中,例如
/:id/?
,而参数则使用role=organiser
或role=volunteer
等。 最佳答案
get
函数希望使用签名为(req, res, next)
的回调,因此您不能仅传递任意参数并期望其起作用。相反,您必须调用一个函数,该函数本身会返回此类函数。
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'));