В этой статье предполагается, что читатель знаком с JavaScript, React.js и концепциями серверной разработки с использованием Express.js.

Введение

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

Мы увидели, что Express.js — это мини-фреймворк, созданный на основе Node.js, позволяющий ускорить внутреннюю разработку.

Мы разработали маршруты и API, которые позволяли внешнему серверу взаимодействовать с внутренним, запрашивая все виды информации.

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

Основные модули

Работая с Node.js, мы знаем, что можем загружать пакеты с помощью диспетчера пакетов Node (npm). Однако основные модули уже загружаются при запуске среды Node с помощью npm init.

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

Некоторые из наиболее распространенных основных модулей: http, fs и path. Сегодня мы сосредоточимся на этих модулях.

Модуль http позволяет создать внутренний сервер с помощью функции createServer(). Поскольку мы не используем Express.js, нам нужно будет определить весь код, необходимый для обработки запросов, внутри самой функции.

Мы можем фильтровать типы запросов и URL-адреса, используя встроенный объект req, который содержит всю информацию, связанную с входящими запросами. Мы также можем включить CORS, используя заголовки по мере необходимости.

При отправке ответа мы можем определить тип контента и использовать JSON.stringify() для беспрепятственной передачи данных обратно на клиентский сервер.

Модуль fs позволяет легко работать с файлами. Будь то чтение контента, запись контента или добавление контента в файл, все это можно сделать с помощью этого модуля.

Для каждого успешного вызова API, сделанного на внутреннем сервере, мы будем включать модуль fs для регистрации данных, связанных с вызовом API. Мы будем хранить эти данные в специальном файле под названием API.log. Этот файл будет находиться в том же месте, что и файл server.js.

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

Мы добавим модуль path для успешного хранения API.log в предназначенном месте.

Обзор кода

Вы можете продолжить здесь, клонировав следующий репозиторий:

https://github.com/CodingAbdullah/Abdullah-Medium-Demos

Каталог, вызывающий беспокойство: /demos/Demo11_Expressless_Node.

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

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

Внутренний сервер будет обрабатывать четыре типа запросов:

  • Введите: POST URL: /one-post
  • Введите: POST URL: /posts
  • Введите: GET URL: /bitcoin-data
  • Введите: GET URL: /dual-coin-data

Первые два используют API-заполнитель JSON, который мы рассматривали ранее. Ссылка на API здесь.

Последние два используют API криптовалюты CoinGecko, который мы также видели ранее. Ссылка на API здесь.

Вот файл server.js, содержащий весь код, необходимый для запуска и функционирования узла-сервера /backend/server.js:

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

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

Если это так, то можете быть уверены, что этот файл станет еще длиннее. Когда мы работали с Express.js, файл server.js едва ли содержал 100 строк кода.

Как отмечалось ранее, мы используем объект req для определения типа запроса и URL-адреса, с которого пользователь запрашивает данные. Мы включили сценарии, в которых мы обрабатываем запросы, не соответствующие ни одному критерию.

Существует также код для добавления данных API в файл с именем API.log. Для получения данных мы используем библиотеку Axios и отправляем эти данные обратно клиенту после их обработки.

В самом конце этого файла мы указываем серверу прослушивать порт 5000.

Вот пример типа данных, хранящихся в файле API.log /backend/API.log:

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

Для демо-версии понадобится интерфейс. Это все, что касается обзора кода!

Время демонстрации!

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

Это можно сделать с помощью npm install. Для серверной части вам потребуется создать файл .env, хранящийся в корневой папке сервера и содержащий значение PORT.

Это номер, с которого будет прослушиваться внутренний сервер. Как только все это будет завершено, можно приступать. В этой демонстрации внешний сервер прослушивает порт 3000, а внутренний сервер — порт 5000.

После запуска вы должны увидеть пустую домашнюю страницу:

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

Большой!

Если мы перейдем к следующей ссылке, вы должны увидеть следующее:

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

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

И, наконец, для данных, связанных с несколькими монетами, вы должны увидеть следующее:

Если вы видите эти данные на экране в этом формате, вы успешно завершили эту демонстрацию.

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

Заключение

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

Мы также отметили, что Express.js значительно упростил внутреннюю разработку, поскольку минимизировал некоторые ключевые функции, необходимые для запуска узла-сервера.

Ссылка на репозиторий GitHub ниже:



И до следующего раза, Абдулла уходит.

Спасибо!

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