我的控制器是否应该采用(res,req)参数或已经提取的参数?

我想知道我应该用expressJS来组织我的路由吗?

在控制器中parsingParams

router.get('/users/:id', UserController.get); class UserController { get(res, req) { var id = res.params.id; UserModel.get(id, function(user) { res.send(user); } } } 

Paramsparsing路由

 router.get('/users/:id', function(req, res) { var id = req.params.id; UserController.get(id, function(user) { res.json(user); } }); class UserController { get(id, fn) { UserModel.get(id, fn); } } 

我发现第二个版本Paramsparsing路线更容易

  • unit testing
  • 在URL参数或请求主体发生变化的情况下

但是我发现的大部分例子都使用了第一个版本,为什么呢?

如果考虑一个更大,更混乱的真实世界应用程序,并且路由名称不再与控制器名称匹配等,那么将完整的路由表(所有router.xxx调用)放在一个地方,如a routes.js 。 对于给定的url,这使得新开发人员更容易找出哪个代码处理哪个url。

如果你在routes.js包含了所有的参数parsing,那么将会变得非常混乱,你可能会失去将所有这些收集到一个文件中的好处。

也就是说,没有任何理由将路由,参数parsing/响应格式化和控制器逻辑分别放到自己的模块中,这样你就无法实现两全其美了。