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

ezykj2lf  于 2023-10-17  发布在  Node.js
关注(0)|答案(2)|浏览(126)

我有一条定义为
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(role = ' organiser'));
我该如何解决这个问题,并保持它的干燥?我 * 不想把参数 * 像/:id/?和参数像role=organiserrole=volunteer等合并到端点中。

i34xakig

i34xakig1#

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'));
bnl4lu3b

bnl4lu3b2#

这对我很有效:

app.get("/users/:userId/books/:bookId", (req, res) => {
  // Access userId via: req.params.userId
  // Access bookId via: req.params.bookId
  res.send(req.params);
});

相关问题