使用控制器的方法作为端点和中间件
Using controller's method as both endpoint and middleware
这里有 2 个简单的场景:
- 通过
id
和 return 获得 user
- 用
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
中重用它,那么我会得到一个错误。
我会将其实现为 :userId
的 app.param
处理程序,并将我的参数命名为(在 express 文档中有一个这样的示例)。然后对于场景 1,路由处理程序将只执行 res.json(req.user);
,而场景 2 将预加载 req.user
以便它在发送用户之前执行它需要执行的任何其他操作。如果 "send the user" 真的只是 res.json(req.user)
它不够大,无法分解成它自己的中间件,但如果它最终成长为一段代码,您可以将它分解成一个中间件或辅助函数。
这里有 2 个简单的场景:
- 通过
id
和 return 获得 - 用
id
获得user
,做一些其他的事情,然后 return
user
我想将场景 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
中重用它,那么我会得到一个错误。
我会将其实现为 :userId
的 app.param
处理程序,并将我的参数命名为(在 express 文档中有一个这样的示例)。然后对于场景 1,路由处理程序将只执行 res.json(req.user);
,而场景 2 将预加载 req.user
以便它在发送用户之前执行它需要执行的任何其他操作。如果 "send the user" 真的只是 res.json(req.user)
它不够大,无法分解成它自己的中间件,但如果它最终成长为一段代码,您可以将它分解成一个中间件或辅助函数。