Как разделить большие контроллеры на несколько файлов в Express?

#javascript #node.js #express #model-view-controller #controller

#javascript #node.js #экспресс #модель-представление-контроллер #контроллер

Вопрос:

Я создаю приложение express, которое до сих пор использовало отдельный файл контроллера с именем users . Это содержит различные функции, связанные с пользователем, такие как signUp / signIn / getPersonalInfo, которые экспортируются с помощью module.exports и требуются в маршрутизаторе.

Проблема в том, что этот файл теперь становится довольно большим, и в идеале мне бы понравилась структура папок, например, следующая:

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

Как я могу сделать это так, чтобы мне все равно требовался только один файл в моем маршрутизаторе:

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

и при этом иметь доступ ко всем функциям внутри каждого контроллера.

Также, если есть более эффективный способ сделать это, пожалуйста, дайте мне знать.

Комментарии:

1. Вам понадобится controllers/users/index.js файл для ручного реэкспорта всех дочерних функций. Или вы можете сделать это с помощью требования webpack для автоматизации ручной работы, если вы используете webpack.

Ответ №1:

Не уверен, что это то, что вы ищете, но в моем проекте используйте несколько функций только с одной ссылкой на мой контроллер bootcamps.

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

Не стесняйтесь взглянуть на мой проект для вдохновения:

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

Комментарии:

1. Спасибо, это очень полезно. Я все еще немного не уверен в том, как лучше структурировать файлы моего контроллера. Скажем, например, у меня есть две модели USER и EMAILS , где у пользователя может быть много электронных писем. Было бы разумнее поместить getUserEmails() функцию в контроллер пользователей или контроллер электронной почты? Если электронные письма принадлежат пользователям, это, безусловно user.getUserEmails() , имеет больше смысла, а email.getUserEmail() не? Или это не так?

2. Это очень хороший вопрос, но я бы лично поместил «getUserEmails ()» внутри контроллера электронной почты, потому что данные, которые вы пытаетесь получить, очень «связаны с электронной почтой». Затем я бы проанализировал «аутентифицированного пользователя» в качестве параметра в контроллере электронной почты, чтобы получать электронные письма пользователя для этого конкретного пользователя. Если вы заглянете в мой ‘reviews.js «маршрутизатор, вы можете видеть, как я справляюсь с чем-то немного похожим на это, когда я делаю «.put». github.com/KristoferMar/NodeJs-Guide/blob/master/routes /…

3. Скажем, например, тогда, когда участник должен зарегистрироваться, этот процесс включает в себя создание новой записи участника, а также новой записи электронной почты. Где находится эта функция контроллера, потому что она управляет обеими моделями? Аналогично getAccountInfo() , поскольку это вернет запись пользователя и связанные с ней электронные письма.