Меню

Структура Express приложений

04.07.2018 - Back-end, NodeJS

Structuring Express Apps

Если мы посмотрим на наш ранее записанный код в index.js, то заметим, что у нас получился большой файл для очень простого приложения. В реальном приложении вы конечно же не будете писать весь этот код в одном файле.

Рассмотрим, как правильно структурировать наше приложение.

Каждая логическая часть нашего приложения для каждого endpoint должна быть в отдельном модуле. Т.е. в нашем случае, все роуты связанные с courses должны быть в отдельном модуле, например courses.js, а все роуты authors должны быть в модуле authors.js.

Таким образом, в корне приложения создадим директорию routes и создадим в ней файл courses.js. Теперь скопируем сюда все роуты связанные с courses. Теперь в самом вверху зареквайрим express.

const express = require('express');

В index.js мы вызывали express как функцию и получали app функцию. Но этот подход не работает, когда вы разделяете роуты на разные модули. Здесь нужно использовать роутер.
У express есть метод Router, который возвращает route объект. Переназовем app в router для ясности.

const express = require('express');
const router = express.Router();

Разница в том, что этот модуль courses, вместо того, чтобы работать с app объектом, будет работать с router объектом. Вконце модуля мы экспортируем наш роутер.

module.exports = router;

По итогу, у нас есть роутер на верху. Потом юзается как обычно, и наконец экспортируется.
Теперь нам нужно загрузить его внутрь index модуля.

const courses = require('./routes/courses');

И после того как мы его зареквайрили нам нужно вызвать app.use и указать два аргумента — первый аргумент это путь. Второй аргумент — объект роутера, который мы импортировали. Просто говоря, мы передаем экспрессу, что для каждого роута, который начинается на /api/courses, использовать роутер courses.

app.use('/api/courses', courses);

Теперь мы можем перейти в наш courses модуль. И сделать роуты немного короче.
Каждый роут в модуле имеет часть /api/courses. Нам больше не нужно ее повторять везде. Потому как мы уже сказали экспрессу в index.js, что все роуты начинающиеся на /api/courses, должны быть обработаны роутом courses. Мы в файле courses.js заменяем /api/courses на /.

Ранее мы создавали middleware функцию logger.js. Так как у нас может быть много middleware функций, создадим для тоже отдельную директорию middleware. И переместим туда logger.

Метки: , , , ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *