Node.js или просто Node — это кроссплатформенная среда выполнения JavaScript с открытым исходным кодом, созданная на базе движка Google Chrome v8. Это позволяет выполнять JavaScript за пределами веб-браузера. Для этого Node.js использует асинхронную модель, управляемую событиями. В этой модели используется однопоточный цикл обработки событий и стратегия неблокирующего ввода-вывода. Это гарантирует, что Node.js обладает отличной скоростью и масштабируемостью приложений.

В общих чертах Node.js позволяет файлам JavaScript вести себя на сервере как язык сценариев на стороне сервера.

JavaScript? Node.js?

JavaScript — это высокоуровневый, но легкий язык программирования, который подчиняется концепциям объектно-ориентированного программирования.

Он был основан Бренданом Эйхом (1961-настоящее время) в 1995 году. Его первоначальный план состоял в том, чтобы создать простой язык сценариев для проверки ввода данных пользователем на веб-сайте для Netscape. Несмотря на то, что он хотел сделать исходный синтаксис JavaScript похожим на синтаксис Scheme, его начальство настаивало на использовании синтаксиса, который будет напоминать язык Java, расцвет которого пришелся на середину 90-х.

Несмотря на то, что Брендан хотел, чтобы JavaScript был простым и понятным, благодаря тому, что он является языком с открытым исходным кодом, он превратился во что угодно, только не простой и понятный! В настоящее время JavaScript используется миллионами разработчиков по всему миру для решения различных задач. Существуют тысячи библиотек JavaScript, которые поддерживают разработку на стороне сервера и на стороне клиента. JavaScript — самый используемый язык программирования в мире, и он используется в качестве клиентского языка программирования для более чем 97% веб-сайтов в мире!

Первоначально Node.js был написан Райаном Далом в 2009 году, примерно через десять лет после первого появления JavaScript в середине 90-х. Из-за ограничений самого популярного веб-сервера того времени, HTTP-сервера Apache, Дхал написал Node.js для обработки нескольких одновременных подключений.

С момента первой демонстрации проекта на первой Европейской конференции JSConf в 2009 году Node постоянно развивался. Более 30 миллионов веб-сайтов используют Node.js для своей серверной части, например Amazon, Netflix, eBay и PayPal. Поскольку Node.js является быстрым, простым, легким, но мощным, а также гибким, веб-сайты с более высоким трафиком легко выбирают Node.js для реализации своей серверной части.

Также помните, что Node.js — это не язык программирования! Скорее это фреймворк, позволяющий запускать файлы JavaScript вне браузера. Первоначальное кодирование выполняется с использованием JavaScript.

Структура проекта Node.js

Node.js постепенно стал очень важным инструментом в современном мире программного обеспечения. Следовательно, новые и опытные разработчики переселяются в технологические стеки, включая Node, для своих проектов. Поскольку Node.js не имеет фиксированной структуры каталогов, разработчикам, которые плохо знакомы с Node.js, может быть сложно с самого начала создать структуру проекта.

Почему эта структура проекта важна?

Наличие сильной структуры проекта жизненно важно для жизни проекта. Это поможет разработчикам устранять ошибки в коде, находить ошибки и отслеживать изменения, которые необходимо внести в будущем. Грязный код в конечном итоге приведет к

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

Основная цель наличия сильной структуры в любом проекте — помочь разработчикам,

  • Пишите чистый, читаемый код
  • Избегайте повторения кода
  • Напишите повторно используемые сегменты универсального кода
  • Внедряйте новые функции, не нарушая существующий код
  • Протестируйте код без каких-либо затруднений

Простая структура проекта

Недавно мне пришлось провести рефакторинг всего бэкэнда проекта, реализованного с помощью Node.js, в качестве стажера по бэкенду. Поскольку вся бизнес-логика была написана внутри файла index.js (app.js), в нем было более 2500 строк. Не вдаваясь сразу в реализацию, я придумал простую структуру проекта для рефакторинга кода.

Это архитектура проекта, которую я разработал. В этой структуре

  • Все файлы, относящиеся к внешнему интерфейсу, находятся в папке client. Остальное рассматривается как бэкэнд проекта.
  • Папка router содержит все файлы маршрутизации, которые сопоставляют запросы с соответствующими конечными точками.
  • Уровень контроллера содержит все контроллеры, которые управляют полученными запросами и вызывают соответствующие служебные файлы.
  • Служебный уровень содержит служебные файлы со всей бизнес-логикой. Фактический процесс в задней части выполняется на этом уровне.
  • Уровень доступа к данным — это уровень, который взаимодействует с базой данных. ORM сопоставляет объектную модель и реляционную базу данных (базы данных SQL), а ODM сопоставляет объектную модель и базу данных документов (базы данных NoSQL).
  • Файлы конфигурации содержат файлы конфигурации проекта.
  • Все длинные файлы сценариев npm перечислены в разделе файлы сценариев.

Также обратите внимание, что это структура, которую я придумал. Есть много других способов определить правильную структуру для проекта Node.js. Вы даже можете включить пакеты, чтобы перечислить все промежуточное ПО и утилиты!

Но как мне структурировать мой проект?

Это самый риторический вопрос для большинства разработчиков, которые плохо знакомы с Node.js. Они проводят несколько хороших часов, решая, какая структура пакета будет лучшей для их проекта. Но помни,

"Нет правильного или неправильного пути!"

Структура проекта может быть организована как угодно! Если вы отлично справитесь с бизнес-логикой, структура проекта будет разработана автоматически! В конце концов, структура может быть любой, какой пожелает разработчик, будь то классическая архитектура MVC или более современная компонентная архитектура.

Чтобы заложить бизнес-логику, я следовал этим простым правилам.

  1. Отдельная бизнес-логика и маршруты API

Express.js — одна из наиболее часто используемых платформ при создании проекта Node.js. Благодаря его способности управлять запросами, представлениями и маршрутами может возникнуть соблазн разместить бизнес-логику внутри маршрутов API. Эта практика в конечном итоге приведет к гигантскому, трудночитаемому, монолитному блоку кода в одном файле.

Вот пример того, что делать нельзя.

Как видите, все в беспорядке. Вот как будет выглядеть маршрутизатор, если из него убрать бизнес-логику.

Следовательно, уберите бизнес-логику с маршрута. Всегда помните, что маршрут существует только для сопоставления запроса с определенным контроллером.

2. Используйте сервисный уровень

Так где же бизнес-логика? Некоторые разработчики включают его в контроллер. Но по моему личному опыту, сервисный уровень — это то место, где должна жить бизнес-логика.

Сервисный уровень — это, по сути, группа классов с собственными методами. Эти классы будут реализовывать основную логику проекта. Класс обслуживания будет взаимодействовать со слоем доступа к данным для выполнения действий с базой данных. Этими действиями управляет ODM/ORM проекта.

Вот как будет выглядеть контроллер после отделения от него бизнес-логики.

Вот как сервисный уровень будет работать за кулисами, чтобы добавить нового пользователя.

3. Создайте структуру пакета

Каждый файл в проекте должен иметь место в проекте. Пакет (просто папка) — идеальное место для группировки общих файлов.

Определение четкой структуры пакетов поможет нам создать четкое разделение всех файлов в нашем проекте. Это создаст четкое разделение между файлами в проекте.

4. Использовать каталог конфигурации

Используйте отдельный пакет для перечисления всех файлов конфигурации в проекте, а не размещайте их в корневом каталоге.

5. Длинные скрипты npm находятся в пакете скриптов

Всегда создавайте отдельный пакет, чтобы перечислить все длинные сценарии npm в package.json.

6. Используйте другой уровень для вызовов сторонних сервисов

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

Одним из наиболее распространенных способов решения этой проблемы является использование шаблона pub/sub. Его можно просто сформулировать как шаблон обмена сообщениями, в котором есть объекты, называемые издателями для отправки сообщений, и объекты, называемые подписчиками, для их получения.

эта модель публикации/подписки обеспечивает асинхронную архитектуру, управляемую событиями, которая повысит производительность, удобочитаемость кода и масштабируемость.

Заключение

Создание проекта Node.js с нуля может быть сложной задачей. Я надеюсь, что эти простые правила помогут вам установить четкую архитектуру проекта при создании вашего проекта Node. 🙂