如何将参数传递给 express 中的回调函数?

How to pass arguments to a callback function in express?

我正在使用 Express 中间件和 NodeJS。我组织了没有回调的路由,但对于其中一些路由,最好是相互函数化,所以我开始写一些回调。

例如我有这个函数(我没有把整个代码放在这里,它对我的​​问题没用):

async function verification(req, res, next) {

我在路由部分是这样使用的:

router.post('/item/:id/dosomething',
  verification,
  async (req, res) => {

一切正常,但如果我想继续使用回调(有时使用干净高效的代码是一个很好的解决方案),我将不得不向函数传递一些参数。我当然试过了,但没用:

router.post('/item/:id/dosomething',
  verification(arg1, arg2),
  async (req, res) => {

我在 Whosebug 上搜索了“将参数传递给回调函数”的答案,但有几个有趣的答案谈到了包装函数,我认为我无法在我的案例中实现它。

如果有人能帮助我,那就太好了。谢谢:)


下面是一个 next 在不将其写入调用的情况下如何工作的片段(查看 verif):

回调:

async function verif(req, res, next) {
  let rows;
  const {
    id
  } = req.params;
  ({ rows } = await db.query(`XXX`))
  if (rows.length === 1) {
    return next();
  } else {
    retour(req, res, 500, "No can do.");
  }

在哪里叫:

router.post('/mymusic/:id/addElements',
  droits.verifRightsCB.bind(undefined, 'music', 'addInMyMusic'),
  verif,
  async (req, res) => {...

路由的最后一部分(async (req, res) =>)仅在verif中满足next()条件时执行,尽管我没有传递任何参数。

function verification(arg1, arg2, req, res, next) {...}
router.post('/item/:id/dosomething',
  verification.bind(undefined, arg1, arg2),
  (req, res) => {...}

(函数不必是async。)

请注意,router.post 语句是在服务器启动期间执行的,而不是每个请求。因此你不能写类似

的东西
router.post('/item/:id/dosomething',
  verification.bind(undefined, arg1, req.params.arg),
  (req, res) => {...}

因为服务器启动时没有req。相反,你可以写

router.post('/item/:id/dosomething',
  (req, res, next) => verification(arg1, req.params.arg, req, res, next),
  (req, res) => {...}

verification函数可以

  • 验证成功后调用next()调用其他中间件功能((req, res) => {...})
  • 或者在验证错误后调用next(err)以跳过其他中间件功能并报告错误。