Как создать проект node js

Создание микросервисов с Node.js

Когда ваше JavaScript-приложение увеличивается в размерах, вы начинаете сталкиваться с проблемами, связанными с поддержкой кода, исправлением ошибок и внедрением новых функций. Кроме того, добавление новых разработчиков в проект становится сложным.

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

Одним из многих вариантов распределенных систем является архитектура микросервисов, которая структурирует приложение как набор слабо связанных сервисов. Службы детализированы, а протоколы связи легковесны (например, протокол HTTP).

Есть несколько вещей, которые стоит подчеркнуть о превосходстве микросервисов и распределенных систем в целом над монолитной архитектурой:

  1. Модульность — ответственность за конкретные операции возлагается на отдельные части приложения
  2. Однородность — интерфейсы микросервисов (API endpoints) состоят из базового URI, идентифицирующего объект данных, и стандартных методов HTTP (GET, POST, PUT, PATCH и DELETE), используемых для управления объектом
  3. Надежность — отказы компонентов приводят только к отсутствию или сокращению определенной функциональной единицы
  4. Ремонтопригодность — компоненты системы могут быть изменены и развернуты независимо
  5. Масштабируемость — экземпляры службы могут быть добавлены или удалены для реагирования на изменения спроса.
  6. Доступность — новые функции могут быть добавлены в систему при сохранении 100% доступности.
  7. Тестируемость — новые решения можно тестировать непосредственно на «поле битвы в продакшене», внедряя их для ограниченных сегментов пользователей, чтобы увидеть, как они ведут себя в реальной жизни.

Кроме того, каждый микросервис может быть написан с использованием языка, техники или структуры, которые наиболее соответствуют задачам, которые он выполняет. Единственная необходимая функция — это возможность публиковать RESTful API для связи с другими сервисами.

В этой статье вы узнаете, как создавать микросервисы, создавая базовую систему, состоящую из двух JavaScript-сервисов, работающих на Node.js.

Подготовка для построения архитектуры микросервисов с Node.js

Для выполнения задач в этом посте вам понадобится следующее:

    (установка Node.js также установит npm.)

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

  • Знание JavaScript и Node.js
  • Некоторое знакомство с протоколом HTTP

Создаем сервис героев

Перейдите в каталог, в котором вы хотите создать проект, и создайте следующую структуру каталогов и файлов:

Если вы хотите использовать систему контроля версий, самое время инициализировать репозиторий. Не забудьте добавить файл .gitignore, как этот, если вы используете Git.

Инициализируйте проект npm внутри каталога /heroes и установите необходимые зависимости, выполнив следующие команды:

Пришло время реализовать сервис. Скопируйте этот код JavaScript в файл /heroes/heroes.js:

Загрузите изображения и команды супергероев по следующим ссылкам и поместите их в каталог /heroes/img :

Код для сервиса героев обеспечивает:

  1. список суперспособностей героев
  2. список героев
  3. Конечные точки API для получения списка героев, обновления профиля героя и получения изображения героя

Протестируйте сервис heroes.js

Код службы героев, показанный ниже, позволяет запускать службу на любом порту HTTP, который вы хотите.

Запустите службу, выполнив следующую инструкцию командной строки:

Вы можете проверить, работает ли служба должным образом, используя Postman, curl, PowerShell Invoke-WebRequest или ваш браузер. Например выполните команду curl указанную ниже:

Если служба работает правильно, вы должны увидеть результаты, похожие на следующий вывод консоли из curl:

В Postman тело ответа должно выглядеть так:

Создаем сервис "угроз"

Какова цель супергероя, если нет опасности? Архитектура микросервисов нашего приложения использует отдельный сервис для представления задач, которые может преодолеть только супергерой. Он также предоставляет конечную точку API для сопоставления супергероев с угрозами.

Процедура создания сервиса угроз аналогична сервису героев.

В главном каталоге вашего проекта создайте следующую структуру каталогов и файлов:

В каталоге ./threats инициализируйте проект и установите его зависимости со следующими инструкциями командной строки npm:

Поместите этот код JavaScript в файл /threats/threats.js:

Вы можете скачать фотографии по следующим ссылкам и поместить в каталог /threat/img:

Помимо списка угроз и основных методов, таких как их перечисление, этот сервис также имеет метод POST /assignment , который прикрепляет героя к данной угрозе:

Поскольку код реализует взаимодействие между службами, ему необходимо знать адрес службы героев, как показано ниже. Если вы изменили порт, на котором работает служба героев, вам нужно отредактировать эту строку:

Тестируем службу "угроз"

Если вы остановили службу героев или закрыли окно терминала, перезапустите ее.

Откройте другое окно терминала и запустите службу угроз, выполнив следующую инструкцию командной строки:

Так же, как вы тестировали сервис героев, протестируйте сервис угроз, выполнив веб-запрос с помощью Postman, curl, PowerShell Invoke-WebRequest или вашего браузера. Обратите внимание, что на этот раз это запрос POST.

Инструкция командной строки curl:

Если служба работает правильно, вы должны увидеть результаты, похожие на следующий вывод консоли из curl:

В Postman тело ответа должно выглядеть так:

В окне терминала, где работает служба героев, вы должны увидеть:

Вы только что отправили Купера (localhost:8081/img/cooper.jpg) с заданием.

. полететь в Пизу и спасти исторический памятник! (localhost:8082/img/tower.jpg):

Вы можете использовать изображения героев и угроз для самостоятельного изучения функциональности сервисов. Эти объекты также будут частью проекта в следующей публикации, которая использует этот проект в качестве отправной точки.

Добавить библиотеку в проект Node.js Express app

Пытаюсь освоить WebStorm. Создал проект Node.js Express App.

Хочу добавить библиотеку.

Установил ее: $ npm install vsvg-paths

Я как понимаю, нужно в app.js ее подключить. Пытаюсь сделать это так:

var vsvg_paths = require("vsvg-paths");

Но мне тактично сообщают, что я делаю, что-то не так (говорит, что decode() не является функцией или просто ошибка подключения библиотеки, если укажу decode не как функцию).

Подскажите, как правильно подключить библиотеку или где почитать об этом?

Создаем простое веб приложение при помощи Node.js

Мы объясним, расскажем и покажем на примере, как это сделали бы мы.

Начнем с самого начала:

ЧТО ТАКОЕ ПРОСТОЕ ПРИЛОЖЕНИЕ?

Простое приложение предполагает, что:

  • могут использоваться операции CRUD (создать, прочесть, обновить, удалить) без сложной логики endpoint (конечных точек);

Конечная точка (англ. endpoint) — это URL (единый указатель ресурса), а проще говоря, адрес местонахождения ресурса в сети Интернет. Этот адрес использует клиент, чтобы получить доступ к ресурсу.

  • отсутствует разделение на роли;
  • отсутствует система аутентификации;
  • не используется библиотеки, расширяющие язык (babel, typescript).

ВЫ ХОТИТЕ СОЗДАТЬ ИМЕННО ТАКОЕ ВЕБ-ПРИЛОЖЕНИЕ?

Тогда наш совет — используйте JavaScript. Node.js. Express.

ПОЧЕМУ JAVASCRIPT?

  • JavaScript изначально задумывался как простой язык , который могли бы использовать не только программисты. Задумка удалась: на данный момент у нас есть несложный язык для реализации как простых , так и сложных продуктов.
  • JavaScript обеспечивает динамичность страницы . Анимация, интерактивные кнопки и графические элементы: мы уже с трудом представляем себе приложения без всего этого.
  • с одной стороны, JavaScript — это клиентский язык . Клиентом в этом случае является браузер, которые интерпретирует код приложения и исполняет его. Интерпретатор кода встроен во все популярные браузеры, то есть в плане поддержки никаких ограничений не существует.
  • с другой стороны, JavaScript можно использовать и на стороне сервера благодаря платформе Node.js, о которой мы поговорим позже.

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

statistics

Согласно результатам опроса Stackoverflow , в котором в 2017г. участвовали более 64 000 разработчиков, JavaScript уверенно лидирует среди наиболее часто используемых языков программирования (61,9%).

JavaScript сохраняет за собой первое место в течение пяти лет подряд. А это уже о чем-то говорит.

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

Angular, React, jQuery, Vue, Lodash — о них много говорят и спорят, но, главное, их успешно используют, и они выполняют свое предназначение.

ЧТО ТАКОЕ NODE.JS?

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

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

  • Согласно статистике использования Node.js для веб-сайтов, доля применения платформы стабильно увеличивается :
  • При помощи Node.js, можно создавать практически любые веб-приложения , кроме, разве, сложных вычислений. Хотя сложные вычисления всегда можно сделать на другом языке, а потом предоставить эти данные для использования и манипулирования ими уже на JavaScript. Но мы сейчас говорим о простом приложении.
  • Специфической областью применения платформы Node.js является микросервисная архитектура. То есть Node.js оптимально использовать для приложений, которые разбиты на небольшие модули (лента новостей, чат, магазин и т.д.). При этом каждый модуль не зависит друг от друга, но все вместе они составляют единую структуру.
  • Дополнительное преимущество заключается в том, что вокруг Node.js образовалось развитое сообщество . Благодаря этому доступна хорошая документация, а также существует большое количество готовых примеров для использования, фреймворков и библиотек, которые позволяют облегчить и ускорить разработку.

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

В сети предлагается множество пошаговых инструкций, которые подробно описывают создание веб-приложения при помощи Node.js. Какие-то из них рассчитаны на подготовленных разработчиков, мы же предлагаем рассмотреть простой пример разработки на Node.js для начинающих программистов и для тех, кто не силен в программировании, но кому интересна логика процесса.

ПОДГОТОВКА

Чтобы начать работу с Node.js, нужно, как минимум, установить Node.js.

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

Вместе с Node.js автоматически устанавливается менеджер пакетов npm.

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

В нашем примере мы будем использовать систему управления базами данных (СУБД) MongoDB. Так же как и в случае с Node.js, на официальном сайте продукта есть подробная документация и инструкция по установке.

Для создания простого приложения нам понадобятся :

  • фреймворк для создания каркаса приложения (Express);
  • драйвер для системы управления базами данных MongoDB;
  • инструмент (пере-) запуска веб-сервера (nodemon).

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

EXPRESS

Почему именно этот фреймворк?

При своей минималистичности и легкости он предлагает весь необходимый набор функций для веб-приложения.

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

Перейдите по ссылке и вы увидите, насколько все просто.

В документации описана последовательность действий и команд и показаны результаты их выполнения.

Генератор Express — это одна из возможностей создания приложения с использованием Express.

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

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

Теперь посмотрим, как все описанное выше реализуется на примере.

ПРИМЕР

  • Создаем папку с будущим проектом , переходим в нее и выполняем инициализацию проекта, отвечая на вопросы установщика.

Для этого используем следующие команды:

  • Потом устанавливаем необходимые модули :
  • Устанавливаем инструмент для автоматического перезапуска сервера , который существенно облегчит процесс разработки:
  • Когда все нужные нам модули установлены, создаем файлindex.js.

Здесь мы подключаем необходимые зависимости (сторонние коды, которые будет использовать наше приложение).

  • Теперь указываем порт прослушивания (цифровое обозначение процесса получателя запроса), чтобы сервер начал слушать HTTP-запросы (запросы к серверу на какое-либо действие, которые поступают от клиента (браузера) по протоколу HTTP.
  • Запускаем сервер при помощи следующей команды:
  • Наш сервер запущен. Проверяем его работу и для этого обращаемся к нему с запросом из любого браузера.

Вторая возможность проверить работу сервера: использование программы Postman .

Postman — это специальная программа, которая облегчает разработчикам создание, тестирование и мониторинг API. С ее помощью можно направлять на сервер запросы, а также настраивать параметры запросов и тестировать работу приложения.

postman get

В нашем случае нет зарегистрированных endpoints, поэтому сервер пока возвращает статус 404 и HTML страницу с ошибкой. Но, главное, что мы выяснили — сервер запущен.

Сейчас настал момент вернуться к типам HTTP-запросов: изначально (когда протокол HTTP только появился) в отношениях между клиентом и сервером подразумевалось только то, что клиент хочет получить ресурс (GET).

По мере того, как система отношений клиент-сервис усложнялась, появился подход REST (REpresentational State Transfer). Он предусматривает использование разных HTTP-методов для разных действий: POST, GET, PUT, PATCH, DELETE.

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

  • Cоздадим первую endpoint в папке app/. Логика в данном случае простая: мы хотим обратиться к серверу по адресу /books и получить от него определенный ответ:
  • Допустим, мы не хотим в нашем приложении ограничиваться одной endpoint, а хотим использовать несколько (хотим создавать, читать, обновлять и удалять данные), тогда подключаем все обработчики , которые помогут реализовать эти действия, в одном файле api/index.js:
  • Когда первая endpoint написана, мы ее регистрируем и проверяем :
  • Перед тем как перейти к другим endpoints, подключаем модуль body-parser (который будет отвечать за обработку запросов) и указываем формат входных и выходных данных endpoints — JSON:
  • Теперь устанавливаем соединение с базой данных “test” , используя заранее установленный драйвер mongodb. После того как соединение с БД установлено — передадим объект database вторым параметром в регистрируемые роуты:
  • Дальше мы можем писать endpoint для создания (CREATE) новой записи в БД. Запись имеет поля author, title, text.

Логика создания такой endpoint тоже очень простая:

  • получаем данные в формате JSON и формируем объект book;
  • вставляем объект в коллекцию books;
  • получаем результат: либо произошла ошибка, либо создан документ;
  • отправляем результат пользователю.
  • Создаем endpoint для получения (READ) записи из БД.

Логику вы уже можете предположить самостоятельно:

  • используем id из параметров запроса и формируем запрос;
  • отправляем запрос в БД;
  • обрабатываем результат: либо произошла ошибка, либо получаем документ с данными;
  • отправляем результат пользователю.
  • Аналогичным путем создаем endpoint для обновления (UPDATE) записи в БД:
  • используем id из параметров запроса и формируем запрос;
  • получаем данные в формате JSON и формируем
    объект book;
  • обновляем документ в БД;
  • обрабатываем результат: либо произошла ошибка, либо получаем статус операции;
  • отправляем результат пользователю.

А также создаем endpoint для удаления (DELETE) записи:

  • используем id из параметров запроса и формируем запрос;
  • удаляем документ из БД;
  • обрабатываем результат: либо произошла ошибка, либо получаем статус операции;
  • отправляем результат пользователю.

Мы рассказали о том, как создать простое приложение с использованием Node.js. Используя это приложение, как основу, можно расширять его функционал за счет дополнительных модулей. Но это уже зависит от того, для чего вы планируете использовать будущий проект.

Остались вопросы? Нужна помощь в разработке? Чем быстрее вы свяжитесь c Umbrella IT, тем быстрее ваши идеи будут воплощены в реальность.

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

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