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

时间:2015-12-11 18:29:20

标签: node.js design-patterns express

我想知道我应该用什么方式在expressJS中组织路由:

在Controller中解析参数

router.get('/users/:id', UserController.get);

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

在路线中解析参数

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);
  }
}

我发现第二个版本 Params解析路径更容易

  • 单元测试
  • 如果更改了URL参数或请求正文

但是我发现的大多数例子都使用第一个版本,为什么?

1 个答案:

答案 0 :(得分:1)

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

如果您在routes.js中包含了所有参数解析,那么它将变得非常混乱,并且您可能会失去将所有这些都集中到一个文件中的一些好处。< / p>

也就是说,没有理由将路由,参数解析/响应格式和控制器逻辑分别放入自己的模块中,从而无法实现两全其美。