【问题标题】:How do you split up large controllers into multiple files in Express?如何在 Express 中将大型控制器拆分为多个文件?
【发布时间】:2021-01-22 09:27:15
【问题描述】:

我正在构建一个 express 应用程序,到目前为止,它一直使用一个名为 users 的单一控制器文件。其中包含各种用户相关功能,如signUp/signIn/getPersonalInfo,使用module.exports导出,在路由器中需要。

问题是这个文件现在变得相当大,理想情况下我想要一个文件夹结构,如下所示:

controllers/users/registration.js
controllers/users/personalInfo.js

我怎样才能做到这一点,这样我仍然可以在我的路由器中只需要一个文件:

var users = require('../controllers/users/?');

并且仍然可以访问每个控制器中的所有功能。

另外,如果有更有效的方法,请告诉我。

【问题讨论】:

  • 您需要一个controllers/users/index.js 文件来手动重新导出所有子函数。或者,如果您使用 webpack,您可以通过 webpack 的 require 来自动化手动工作。

标签: javascript node.js express model-view-controller controller


【解决方案1】:

不确定这是否是您要查找的内容,但在我的项目中使用多个功能,仅引用我的“训练营”控制器。

const {
  getBootcamps,
  getBootcamp,
  createBootcamp,
  updateBootcamp,
  deleteBootcamp,
  getBootcampsInRadius,
  bootcampPhotoUpload
} = require('../controllers/bootcamps');

请随意查看我的项目以获取灵感:

https://github.com/KristoferMar/NodeJs-Guide/blob/master/routes/bootcamps.js

【讨论】:

  • 谢谢,这很有用。我仍然有点不确定如何最好地构建我的控制器文件。例如,我有两个模型 USEREMAILS,其中一个用户可以有很多电子邮件。将getUserEmails() 函数放在用户控制器或电子邮件控制器中是否更有意义?如果电子邮件确实属于用户,user.getUserEmails()email.getUserEmail() 更有意义?还是不是这样?
  • 这是一个很好的问题,但我个人会将“getUserEmails()”放在电子邮件控制器中,因为您尝试获取的数据与“电子邮件相关”非常重要。然后,我会将“经过身份验证的用户”解析为电子邮件控制器中的参数,以获取该特定用户的用户电子邮件。如果您查看我的“reviews.js”路由器内部,您会看到当我执行“.put”github.com/KristoferMar/NodeJs-Guide/blob/master/routes/… 时我如何处理与此类似的事情
  • 比如说,当会员必须注册时,这个过程包括创建一个新的会员记录以及一个新的电子邮件记录。这个控制器功能在哪里,因为它操纵两个模型? getAccountInfo() 类似,因为这将返回用户记录和相关电子邮件。
猜你喜欢
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 2021-12-16
相关资源
最近更新 更多