使用控制器的方法作为端点和中间件

Using controller's method as both endpoint and middleware

这里有 2 个简单的场景:

  1. 通过 id 和 return
  2. 获得 user
  3. id 获得 user,做一些其他的事情,然后 return

我想将场景 2 实现为

router.post('/api/users/:id/someStuff', controller.getUser, controller.doStuff)

但是场景 1 应该实现为

router.post('/api/users/:id/someStuff', controller.getUser)

基本上,controller.getUser 既是中间件又是端点。我该如何做到这一点?如果我在 getUser 中使用 res.son(),然后在 doStuff 中重用它,那么我会得到一个错误。

我会将其实现为 :userIdapp.param 处理程序,并将我的参数命名为(在 express 文档中有一个这样的示例)。然后对于场景 1,路由处理程序将只执行 res.json(req.user);,而场景 2 将预加载 req.user 以便它在发送用户之前执行它需要执行的任何其他操作。如果 "send the user" 真的只是 res.json(req.user) 它不够大,无法分解成它自己的中间件,但如果它最终成长为一段代码,您可以将它分解成一个中间件或辅助函数。