#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()
, поскольку это вернет запись пользователя и связанные с ней электронные письма.