Node.js + Express:路由 vs 控制器

107

我刚接触Node.js和Express,正在尝试了解两个似乎有重叠概念的东西,路由与控制器。

我看到过一些简单的例子,只是 app.js + routes/* 就足以处理各种请求。

然而,我也看到人们在谈论使用控制器,有些人暗示使用一种更正式的MVC模型(???)。

如果有人能帮我澄清这个谜团,并提供一个在Node.js+ Express框架中设置控制器的好例子,那就太好了!

谢谢,

2个回答

140

Express是一个很棒的框架(以及Node.js整体),它并不会对你施加太多意见。但这也带来了缺点,就是它不会为你提供任何意见。因此,你可以自由地(而且必须!)按照自己的喜好和模式来设置。

在使用Express时,你完全可以采用MVC模式,如果你希望的话,路由处理程序当然可以充当控制器的角色——但你必须要这样设置。你可以在Express示例文件夹中找到一个很好的例子,叫做mvc。如果你查看lib/boot.js,你可以看到他们是如何设置这个例子的,即要求每个文件都在controllers目录中,并根据在控制器上创建的方法名称动态生成Express路由。


4
这个相当聪明的回答的第一段也很好地解释了和区分了这两个术语。 - Frank N

2
你可以只有一个routes文件夹,也可以两者都有。例如,一些设置路由/路径(如/user/:id)并将它们连接到Get、Post、Put/Update、Delete等,然后在routes文件夹中:

最初的回答

const subController = require('./../controllers/subController');

Router.use('/subs/:id');

Router
 .route('subs/:id')
 .get(subController.getSub)
 .patch(subController.updateSub);

然后,在控制器文件夹中:

exports.getSub = (req, res, next) => {
  req.params.id = req.users.id;
};

只是为了说明一下,我曾经做过没有控制器文件夹的项目,并将所有逻辑放在一个地方。

最初的回答:

仅仅是想说明一下,我曾经完成过一些没有控制器文件夹的项目,把所有的逻辑都放在同一个地方。


哦,这是一件真正需要避免的事情——把所有代码都放在一个地方(一个文件)里。我花了一个多月的时间来理解之前开发人员编写的单文件代码,最终我只能从头开始重新编写所有内容。 - Bilal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接