Node.js + Express: Маршрути проти контролера


98

Нове у Node.js та Express, я намагаюся зрозуміти ці два, здається, перекриваються концепції, маршрути проти контролера.

Я бачив приклади того, як просто робить app.js + routes / *, цього, здається, достатньо для маршрутизації різних необхідних запитів.

Однак я також бачу, як люди говорять про використання контролерів, і деякі, що передбачає більш офіційну модель MVC (???).

Було б чудово, якщо хтось може допомогти мені розкрити цю таємницю, і якщо у вас є хороший приклад для налаштування контролера в Node.js + Express, це буде чудово!

Дякую,

Відповіді:


129

Однією з цікавих речей у Express (і Node загалом) є те, що вона не викликає на вас багато думок; одним із мінусів є те, що це не викликає жодної думки щодо вас. Таким чином, ви можете (і вимагати!) Самостійно формувати будь-які подібні думки (зразки).

У випадку з Express ви однозначно можете скористатися шаблоном MVC, і обробник маршруту, безсумнівно, може виконувати роль контролера, якщо ви цього забажаєте - але ви повинні налаштувати його таким чином. Чудовий приклад можна знайти у папці Express із назвою mvc. Якщо ви подивитесь lib/boot.js, ви можете побачити, як вони налаштували приклад вимагати кожного файлу в controllersкаталозі, і генерувати експрес-маршрути на льоту, залежно від назви методів, створених на контролерах.


2
Перший абзац цієї досить розумної відповіді також дає гарне пояснення / різницю між цими двома термінами.
Frank Nocke

1

Ви можете просто мати папку маршрутів або обидва. Наприклад, деякі встановлюють маршрути / шляхи (наприклад, / user /: id) і підключають їх до Get, Post, Put / Update, Delete тощо, а потім у папці route:

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

Просто щоб щось зробити. Я робив проекти без папки контролерів і розмістив всю логіку в одному місці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.