Для запуска Node.js:
Команда -
node (запустите Node REPL в своем терминале)
node — версия (распечатайте текущую версию Node)
узел имя_файла.js (выполнить код узла в файле имя.js)
💡 REPL означает Read Eval Print Loop. Это список шагов, которые происходят, когда вы запускаете команду
node
, а затем вводите код.
Глобальный объект Node.js
В Node у нас есть объект global
, к которому мы всегда можем получить доступ. Функции, которые, как мы ожидаем, будут доступны везде, находятся в этом объекте global
.
Например, чтобы какой-то код выполнялся через 5 секунд, мы можем использовать либо global.setTimeout
, либо просто setTimeout
. Ключевое слово global
является необязательным.
setTimeout(() => { console.log('hello'); }, 5000);
Вероятно, самый известный глобальный — это global.console.log
, который мы пишем как просто console.log
.
Модульная система Node.js
Функция require, Встроенные модули, Создание модулей, Модули ECMAScript
В Node.js каждый файл рассматривается как отдельный модуль. Модули предоставляют нам способ повторного использования существующего кода.
Функция require
Мы можем повторно использовать существующий код с помощью встроенной в Node функции require()
. Эта функция импортирует код из другого модуля.
const fs = require('fs'); fs.readFileSync('hello.txt'); // OR... const { readFileSync } = require('fs'); readFileSync('hello.txt');
Встроенные модули
Некоторые модули, такие как fs, встроены в Node. Эти модули содержат функции, специфичные для Node.
Основные встроенные модули включают:
- fs — чтение и запись файлов в вашей файловой системе.
- путь — объединяйте пути независимо от используемой ОС.
- процесс — информация о текущем запущенном процессе, например. process.argv для переданных аргументов или process.env для переменных среды
- http — делать запросы и создавать HTTP-серверы.
- https — работа с защищенными HTTP-серверами с использованием SSL/TLS.
- events — работа с EventEmitter
- crypto — инструменты шифрования, такие как шифрование и хеширование.
Пакеты Node.js
Команды NPM, package.json, node_modules, package-lock.json
Разработчики Node часто публикуют пакеты, которые другие разработчики могут использовать для решения общих проблем. Пакет – это набор модулей Node вместе с файлом package.json, описывающим пакет.
Для работы с Node-пакетами мы используем NPM. NPM включает в себя две вещи:
- Реестр NPM с огромной коллекцией пакетов Node, которые мы можем использовать.
- Инструмент NPM, который вы установили при установке Node.
Большинство приложений Node, которые мы создаем, включают файл package.json, что означает, что наши приложения Node также являются пакетами Node.
Файл package.json содержит:
- Название, версия, описание, лицензия текущего пакета.
- Скрипты для автоматизации таких задач, как запуск, тестирование и установка текущего пакета.
- Списки зависимостей, которые должны быть установлены текущим пакетом.
Источник событий Node.js
Node.js предоставляет встроенный модуль для работы с событиями.
const EventEmitter = require('events'); const celebrity = new EventEmitter(); celebrity.on('success', () => { console.log('Congratulations! You are the best!'); }); celebrity.emit('success'); // logs success message celebrity.emit('success'); // logs success message again celebrity.emit('failure'); // logs nothing
Многие функции Node моделируются с помощью класса EventEmitter. Некоторые примеры включают работающий в данный момент узел process
, работающий HTTP-сервер и веб-сокеты. Все они испускают события, которые затем можно прослушивать с помощью функции прослушивания, такой как on()
.
Например, мы можем прослушивать событие выхода в текущем запущенном процессе. В этом случае у события есть код, связанный с ним, чтобы более точно указать, как процесс завершается.
Концепции серверной части
Архитектура клиент-сервер
Ваш интерфейс обычно является клиентом. Ваш бэкэнд обычно является сервером.
В клиент-серверной архитектуре клиенты получают доступ к данным (или «ресурсам») с сервера. Затем клиент может отображать эти данные и взаимодействовать с ними.
Клиент и сервер взаимодействуют друг с другом по протоколу HTTP.
API
Сокращение от интерфейса прикладного программирования.
Это набор функций или операций, которые поддерживает ваш внутренний сервер. Фронтенд взаимодействует с бэкендом, используя только эти операции.
В Интернете внутренние API обычно определяются списком URL-адресов, соответствующими методами HTTP и любыми запросами и параметрами.
CRUD
Сокращение от «Создать, прочитать, обновить и удалить».
Это основные операции, которые каждый API поддерживает с коллекциями данных. Ваш API обычно сохраняет (или «сохраняет») эти наборы данных в базе данных.
RESTful
RESTful API — это те, которые следуют определенным ограничениям. К ним относятся:
- Клиент-серверная архитектура. Клиенты получают доступ к ресурсам с сервера по протоколу HTTP.
- Связь без гражданства. Каждый запрос содержит всю информацию, необходимую серверу для обработки этого запроса. Каждый запрос отделен от любого другого запроса.
- Кэшируемый. Связь без сохранения состояния упрощает кэширование.
Express.js
Маршруты GET, Маршруты POST, Маршрутизаторы
Структура папок Node.js
Одну типичную структуру папок для API с архитектурой RESTful и с использованием среды Express можно найти ниже. Серверы Node обычно следуют шаблону Model View Controller. Модели живут вместе в одной папке. Контроллеры сгруппированы в зависимости от того, к какой функции или набору они относятся. Представления обычно управляются внешним интерфейсом, хотя некоторые серверы Node могут обслуживать статический HTML или использовать механизмы шаблонов, такие как Handlebars.