Loftschool школа онлайн обучения IT профессиям
Профессии
  • Веб-разработчик
  • Frontend разработчик
  • Backend разработчик
  • Full Stack разработчик
  • Интернет-маркетолог
  • Android-разработчик
  • UX/UI Дизайнер
Курсы
          • Основы вёрстки
          • Веб для начинающих
          • JavaScript
          • Vue.js
          • React.js
          • Node.js
          • PHP
          • Контекстная реклама
          • SMM
          • SEO для всех
          • Android: базовый
          • Android: продвинутый
          • UX/UI-дизайн: базовый
          • UX/UI-дизайн: PRO
          • Python для начинающих
          • Python: машинное обучение
        Профессия Дизайнер со скидкой
        -20%
        До конца акции:
        14
        23
        41
        Дней
        Часов
        Минут
        • Главная
        • Блог
        • Статьи
        • Что такое Node.js: для чего нужен, преимущества и как установить
        Полезный блог
        Статьи
        Опубликовано 23.12.2022 17:08

        Что такое Node.js: для чего нужен, преимущества и как установить

         

        Abstract links

        Оглавление:

          1. Суть понятия.
          2. Для чего нужен.
          3. Преимущества и недостатки.
          4. Где будет лучшим решением.
          5. Как установить.
          6. Как пользоваться, основные команды.
          7. Фреймворки и вспомогательные инструменты.
          8. Первая программа (приложение) на Node.
          9. Резюме + советы по обучению.

        Node.js — это программная среда на JavaScript-движке (V8). Используется для компиляции JS-кода в машинный язык. Другими словами, эта программная платформа транслирует исходный JS непосредственно в машинный код, который и будет исполняться уже на серверной стороне. Важно уточнить: Node.js не является самостоятельным языком программирования, а только программной платформой для использования JavaScript на серверной стороне. При этом она использует подходы событийно-ориентированного и так называемого react-программирования. Чаще всего, «Нод» задействуется в качестве веб-сервера, однако, может применяться и для создания десктопных программ и других целей (например, для программирования микроконтроллеров). Эта платформа появилась в 2009 году и сегодня используется очень широко, в самых разнообразных отраслях разработки. По типу программной платформы она относится к средам выполнения.

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

        Для чего нужен Node.js

        Сперва проясним два важных момента: что такое Node и чем он не является.

        Чем НЕ является Node

            • Это не фреймворк, это сервер.
            • Обертки Node над JavaScript V8 Runtime, сделаны не на JavaScript, а на языке C.
            • Он не многопоточный. Он работает в одном потоке с обратным вызовом.
            • Он не для начинающих, кто не умеет работать с JavaScript.

        Чем является Node

            • Это сервер, который может выполнять JavaScript. Это своего рода браузер на стороне сервера.
            • Это кросс-платформа для развертывания real-time веб-приложений.
            • Он предоставляет вам асинхронные API (управляемые событиями типа ввод-вывод)
            • Он запускает однопоточный цикл, основанный на событиях, поэтому все выполнения становятся неблокирующими.

        Платформа «Нод» используется для программирования на стороне сервера. Чаще всего, её код используется для создания веб-приложений, сайтов (и веб-страниц), кроме того — применяется для развертывания программ командной строки (cmd).

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

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


        Вот краткий список примеров, что можно сделать на Node.js:

        • Десктопная программа для различных операционных систем, включая Windows, Linux, DOS, UNIX, macOS.
        • Кроссплатформенная программа.
        • Онлайн-сервис.
        • Социальная сеть.
        • Онлайн-игра.
        • Любой сайт.

        Преимущества и недостатки

        Давайте начнём с недостатков, так как ограничения особенно важны ещё на этапе выбора программной платформы. Вот они:

        Минусы

        • Node.js не обеспечивает масштабируемость. Одного процессора будет недостаточно; при этом платформа не предоставляет никакой возможности масштабирования для использования преимуществ многоядерности, обычно присутствующей в современном серверном оборудовании.
        • Работа с реляционной базой данных — превращается в сильную головную боль, если вы используете Node.
        • Каждый раз при использовании обратного вызова генерируются тонны вложенных обратных вызовов.
        • Без глубокого погружения и знания JS можно столкнуться с концептуальной проблемой.
        • Node.js не подходит для задач, требующих больших затрат процессора. Он подходит только для непосредственного ввода-вывода (например, для веб-серверов).

        Плюсы

        Теперь — достоинства платформы «Нод», которые оценят как новички, так и программисты с опытом:

        • Асинхронный ввод-вывод, управляемый событиями, помогает в одновременной обработке запросов.
        • Один и тот же кусок кода можно использовать как на серверной, так и клиентской стороне. 
        • Использует JavaScript, который легко выучить за несколько месяцев
        • Есть NPM. Это собственный пакет модулей для Node. Там есть всё и он продолжает расти.
        • Активное и живое сообщество, с большим количеством кода, распространяемого через github и другие площадки для разработчиков.
        • Вы можете передавать большие файлы.

        И, конечно, углубляясь в «Нод» вы продолжаете совершенствоваться в профессии бэкенд-разработчика: у нас также есть полноценный курс для тех кто хочет постигнуть профессию бэкенд-разработчик. За 3 месяца вы ознакомитесь со всеми важными технологиями (от Node.js и PHP до серверного JavaScript), которые нужны специалисту в 2023 году и даже получите несколько впечатляющих проектов для своего будущего портфолио.

        Где Node будет лучшим решением

        Вот несколько приложений или областей, где Node.js может стать наилучшим инструментом:

        WebSocket servers. Неблокирующая архитектура делает «Нод» наилучшим инструментом для развертывания WebSosket-приложений или стриминг-приложений. Серверы чатов могут стать более эффективными, быстрыми и отлаженными, используя Node.js в качестве основы (ведь такие серверы работают в realtime-режиме, где скорость отклика и передачи данных особенно важны),

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

        Потоковая передача данных. Поскольку Node имеет дело с концепцией обратного вызова, ее можно задействовать и для потоковой передачи данных. Это может быть очень полезно для самых разнообразных целей, особенно для бизнеса (например, агрегаторы товаров получают результаты сразу из нескольких сторонних API).

        Рекламный сервер. Рекламные серверы должны быть самыми быстрыми. Если реклама на сайте загружается быстрее чем основной контент, то главное внимание пользователя получит именно рекламный баннер. Другое дело, если реклама загружается медленнее: допустим, у вас большой баннер до контента, который загружается 5 секунд. И пока такая реклама будет прогружаться пользователь уже начнёт читать середину страницы. Поэтому, рекламные серверы действительно должны быть быстрыми, и вот почему нужно использовать Node.

        Программное обеспечение для фондовой биржи. Это конкретный пример. И он хорошо иллюстрирует возможности «Нод». В случае обновления акций все должно происходить в realtime-режиме. Node делает возможным развертывание веб-приложений, которые эффективно обмениваются данными в режиме реального времени.

        Как установить Node.js

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

        Компоненты NPM

        • Сайт: вы можете найти пакеты для своего проекта на официальном сайте NPM. Кроме того, вы можете создавать и настраивать профили для управления всеми типами проектов (и настройки к ним доступа).
        • Интерфейс командной строки (CLI): нужен для взаимодействия с пакетами и репозиториями NPM. Используется CLI, запускаемый с терминала.
        • Реестр: Имеет огромную базу данных проектов JavaScript и мета-данных. Позволяет использовать любой поддерживаемый NPM-реестр. 

        Как скачать и установить Node.js и NPM на операционную систему Windows?

        Поскольку далее мы будем делать полноценное веб-приложение с помощью Node.js, прежде всего, необходимо установить Node.js. Вы можете найти эту программную платформу для большинства операционных систем, включая Windows и Mac OS. В рамках этой статьи — рассмотрим установку только на Windows.

        Давайте начнем с первого шага — установки программы.

        Шаг 1: Скачайте программу установки

        Скачайте программу установки для Windows с официального сайта Node.js. Убедитесь, что вы скачали последнюю версию. Она включает в себя менеджер пакетов NPM. 

         

        Обязательно выберите 64-битную версию программы установкиОбязательно выберите 64-битную версию программы установки

        Рекомендуем выбрать LTS-версию (Long-term Support), если планируете использовать эту программную платформу долгосрочно. После клика по зеленой кнопке файл .msi будет загружен в ваш браузер. 

        После загрузки установочного пакета на жёсткий диск — запустите его. 

        Сделайте двойной клик по скаченному файлу

        Сделайте двойной клик по скаченному файлу

         

        Шаг 2: Установите программу Node.js и программу NPM

        Нажмите кнопку Next

        Нажмите кнопку Next

        На экране появится приветственное сообщение, нажмите кнопку «Далее» (или Next). Начнется процесс установки. Выберите нужный путь, куда вы хотите установить Node.js.

        Нажав на кнопку Next, вы попадёте на следующий экран настройки

        Нажав на кнопку Next, вы попадёте на следующий экран настройки

        Убедитесь, что вы выбрали менеджер пакетов npm, а не установленный по умолчанию Node.js runtime. Таким образом, мы сможем установить Node и NPM одновременно.

        Отметьте компоненты, которые должны быть установлены

        Отметьте компоненты, которые должны быть установлены

        У вас должно быть, как минимум, 143 мегабайт пространства для установки Node.js и функций npm.

        Убедитесь, что устанавливаете программу из под учетной записи администратора

        Убедитесь, что устанавливаете программу из под учетной записи администратора

        Теперь нажимаем кнопку Install. Ждём пока распакуются все файлы и установка будет завершена.

        Шаг 3: Проверьте текущую версию установленного Node.js и NPM

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

        Запустите командную строку «Нод»

        Запустите командную строку «Нод»

        На экране появится окно Command Prompt. Проверьте свою версию Node.js (и обязательно версию NPM). Для этого есть две команды:

        • Чтобы проверить версию Node, введите команду node -v. 
        • Чтобы проверить версию NPM, введите команду npm -v.

        Все установлено правильно
        Все установлено правильно

        Не стоит беспокоиться, если вы увидите цифры, отличные от тех, которые есть на скриншоте выше: Node и NPM ну очень часто обновляются. Главное — чтобы не было ошибок.

        Как пользоваться, основные команды

        Разобрать все возможности, функции и инструменты программной платформы «Нод» было бы нереально в рамках одной статьи. Поэтому, далее — мы рассмотрим только основы: консоль / REPL, главные команды, синтаксис.

        Основы Node.js: синтаксис, типы примитивов, команды

        Node.js имеет полную совместимость с JavaScript (если можно вообще так выразиться). Таким образом, синтаксис JavaScript, который используется внутри Node.js аналогичен синтаксису браузерного JS.

        Команд Node.js очень много. И не нужно пытаться запомнить их все на начальном этапе изучения платформы. 


        Мы сэкономим ваше время — приводим таблицу самых популярных команд «Нод», которая поможет вам начать работу с платформой:

        Команда

        Описание команды

        v, --version

        Используется для печати версии узла.

        -h, --help

        Используется для печати опций командной строки узла.

        -e, --eval "script"

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

        -p, --print "script"

        Он идентичен -e, но печатает результат.

        -c, --check

        Проверяет синтаксис сценария без выполнения.

        -i, --interactive

        Открывает REPL, даже если stdin не является терминалом.

        -r, --require module

        Используется для предварительной загрузки указанного модуля при запуске. Он следует правилам разрешения модуля require(). Module может быть либо путем к файлу, либо именем модуля узла.

        --no-deprecation

        Заглушает предупреждения об устаревании.

        --trace-deprecation

        Используется для печати трассировки стека для исправлений.

        --throw-deprecation

        Выбрасывает ошибки, связанные с обесцениванием.

        --no-warnings

        Заглушает все предупреждения процесса (включая предупреждения об устаревании).

        --trace-warnings

        Печатает трассировку стека для предупреждений процесса (в том числе об устаревании).

        --trace-sync-io

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

        --zero-fill-buffers

        Автоматически обнуляет все вновь выделенные экземпляры буферов и медленных буферов.

        --track-heap-objects

        Отслеживает выделение объектов кучи для моментальных снимков.

        --prof-process

        Обрабатывает вывод профилировщика V8, сгенерированный с помощью опции v8 --prof.

        --V8-options

        Печатает параметры командной строки V8.

        --tls-cipher-list=list

        Определяет альтернативный список шифров tls по умолчанию (требуется, чтобы node.js был собран с поддержкой шифрования (по умолчанию)).

        --enable-fips

        Включает fips-совместимое шифрование при запуске (требуется, чтобы node.js был собран с ./configure --openssl-fips).

        --force-fips

        Принудительно включает fips-совместимое шифрование при запуске (нельзя отключить из кода скрипта). Те же требования, что и --enable-fips).

        --icu-data-dir=file

        Указывает путь загрузки данных ICU (Отменяет node_icu_data).

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

        Давайте посмотрим на особенности программной платформы и узнаем, чем она отличается от JavaScript.

        Примитивы

        Node.js включает следующие типы примитивов:

        • Строка.
        • Число.
        • Булево.
        • Неопределенный.
        • Null.
        • RegExp.

        Все остальное — является объектом в Node.js.

        Свободная типизация

        JS в Node.js имеет поддержку свободной типизации, как и в браузерном JS. Можно применять привычный оператор var для введения какой-либо переменной любого типа, например.

        Объектный литерал

        Синтаксис объектного литерала такой же, как и в браузерном JS.

        var obj = { authorName: 'Ryan Dahl', language: 'Node.js' }

        Функции

        Функция также может иметь атрибуты и свойства. Она может рассматриваться как класс в JavaScript.

        function Display(x) { console.log(x); } Display(100);

        Buffer

        Node включает дополнительный тип данных под названием Buffer (кстати, он недоступен в браузерном JS). Буфер, в основном, используется для хранения двоичных данных, при чтении из файла или получении пакетов по сети.

        Объект процесса

        Каждый сценарий Node выполняется в процессе. Соответственно, он включает объект process — для вывода деталей по конкретному процессу.

        В примере ниже показано, как получить информацию о процессе в REPL с помощью объекта process.

        > process.execPath
        'C:Program Files
        odejs
        ode.exe'
        > process.pid
        1652
        > process.cwd()
        'C:'

        По умолчанию локальный

        JavaScript Node отличается от браузерного JS и когда речь заходит о глобальной видимости. В браузерном JS переменные всегда приобретают статус глобальных (конечно, речь о тех, которые используются без var-оператора). В Node по умолчанию — все становится локальным.

        Доступ к глобальной области видимости

        В браузере глобальная область видимости — это объект окна. В Node же глобальный объект — глобальная область видимости.

        Чтобы добавить что-то в глобальную область видимости, нужно экспортировать это с помощью export (либо, для конкретных целей, введением module.export). Таким же образом импортируйте модули / объекты с помощью функции require(), чтобы получить к ним доступ из глобальной области видимости.

        Например, чтобы экспортировать объект в Node, нужно применить exports.name = object.

        exports.log = { console: function(msg) { console.log(msg); }, file: function(msg) { // log to file here } }

        Теперь вы можете импортировать объект log через функции require() и использовать его в любом месте вашего проекта.

        REPL: что это и как пользоваться

        Node поставляется с виртуальной средой REPL (она же оболочка или командная строке). REPL — это быстрый и простой способ тестирования простого кода Node / JavaScript.

        Самые главные команды для REPL также даём в таблице:

        REPL-команда

        Описание команды

        .help

        Отображение справки по всем командам.

        tab Keys

        Отображение списка всех команд.

        Up/Down Keys

        Просмотр предыдущих команд, примененных в REPL.

        .save filename

        Сохранить текущую сессию Node REPL в файл.

        .load filename

        Загрузить указанный файл в текущий сеанс Node REPL.

        ctrl + c

        Завершить выполнение текущей команды.

        ctrl + c (twice)

        Выйти из REPL.

        ctrl + d

        Выйти из REPL.

        .break

        Выход из многострочного выражения.

        .clear

        Выход из многострочного выражения.

        Теперь давайте посмотрим, как это работает. Чтобы запустить REPL (оболочку Node), откройте cmd строку (в Windows) или терминал (в Mac или UNIX/Linux). Теперь укажите команду node, как показано ниже. 

        Укажите команду в командной строке

        Укажите команду в командной строке

        Что умеет эта командная строка? Например, вы можете проверить практически любое выражение Node / JavaScript в REPL. Допустим, вы хотите узнать результат для 50 + 43:

        Видим ответ в новой строке. Оператор + (знак плюс) также склеивает строки, как в браузерном JS

        Видим ответ в новой строке. Оператор + (знак плюс) также склеивает строки, как в браузерном JS

        Вы также можете определить переменные и выполнить над ними какую-либо операцию.

        Работа с переменными в консоли

        Работа с переменными в консоли

        Если вам нужно написать многострочное выражение или функцию JavaScript — нажимайте Enter всякий раз, когда хотите написать что-то в следующей строке (как продолжение кода) — терминале REPL появятся три точки (...), это означает, что вы можете продолжить на следующей строке. Напишите .break, чтобы выйти из режима продолжения.

        Например, вы можете определить функцию и выполнить ее, как показано ниже

        Например, вы можете определить функцию и выполнить ее, как показано ниже

        Вы можете выполнить внешний файл JavaScript, инициировав команду node fileName. Например, ниже приведен запуск mynodejs-app.js в командной строке / терминале и отображение результата.

        console.log("Hello World");

        Теперь вы можете инициировать запуск mynodejs-app из cmd:

        Успех. Мы вызывали mynodejs-app

        Успех. Мы вызывали mynodejs-app

        Когда вы закончите и понадобится закрыть REPL, укажите команду .exit и нажмите Enter.

        Таким образом, вы можете выполнить любой код Node / JavaScript в оболочке node (REPL). Это даст вам результат, аналогичный тому, который вы получаете в консоли браузера Google Chrome.

        Фреймворки и вспомогательные инструменты

        Фреймворки Node (как правило) могут быть трех типов — MVC, Full-Stack Model-View-Controller и фреймворки REST API. 

        • MVC-фреймворки (на основе Model-View-Controller). Эти фреймворки предлагают собственный шаблон проектирования, который разделяет логику веб-приложения на три основные части: модели, представления и контроллеры. Разделение задач разработки в таком виде делает чрезвычайно простым масштабирование веб-приложения. Express.js — каноничный пример MVC-фреймворка.
        • Полностекевые MVC-фреймворки. При создании веб-приложений в realtime-режиме полнофункциональные MVC-фреймворки дают огромное количество строительных блоков, библиотек, шаблонизаторов и ряд других возможностей для разработки. Кроме того, такие фреймворки могут применяться как в разработке фронтенда, так и бэкенда веб-приложения.
        • REST API. Фреймворки Node ориентированы на более быстрое создание приложений с помощью готового REST API. Это означает, что вам не нужно беспокоиться об архитектурных стилях сетевых приложений и других сопутствующих вопросах.

        Почти все эти фреймворки предоставляют готовый интерфейс программирования, что значительно экономит время веб-разработчика. 

        Вспомогательные инструменты

        Теперь посмотрим на конкретные инструменты, которые дополнят «Нод».

        Derby.js. Полнофункциональный инструмент для создания «Нод»-приложений. Derby.js отличный выбор для развертывания приложений в реальном времени, поскольку позволяет одному и тому же коду работать на Node (сервер) и в браузере. Таким образом, вам не нужно беспокоиться о написании отдельных кодов для части представления. 

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

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

        Koa.js. Фреймворк нового поколения. Инструмент особенно удобен при создании API (ведь он может эффективно работать с HTTP-посредниками с помощью стекоподобного метода). Кроме того, он конструктивно нормализует недостатки Node. С помощью этого фреймворка можно поддерживать различные формы контента, предоставляемого пользователям по одному и тому же URL.

        Koa похож на многие другие системы промежуточного ПО (Ruby's Rack, Connect)
        Koa похож на многие другие системы промежуточного ПО (Ruby's Rack, Connect)

        Loopback.js. Обеспечивает наилучшее соединение с любым фреймворком Node. Это означает, что вы можете интегрировать его с несколькими различными API-сервисами. Loopback.js лучше всего работает с REST API: платформа обеспечивает отличную гибкость, соединяясь с широким спектром устройств, браузеров, баз данных и сервисов. Структурированный код фреймворка помогает поддерживать модули приложений и высокую скорость разработки.

        Эти компании используют Loopback.js

        Эти компании используют Loopback.js

        Meteor.js. Одно приложение, один язык. Если вы ищете фреймворк для Javascript и использующий только один язык, Meteor.js — идеальный выбор (с открытым исходным кодом). Он автоматически меняет данные среди клиентов. Самое главное — фреймворк удобен для различных операционных систем, включая, Android, iOS и настольных приложений. Meteor также имеет обширные библиотеки и крутые функции для тестирования цепочки клиент / сервер. 

        Три причины выбрать Meteor.js в качестве основного фреймворка

        Три причины выбрать Meteor.js в качестве основного фреймворка

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

        Для создания первой программы вам понадобятся два компонента: Node и npm, установленные на вашем компьютере. 

        Откройте консоль и выполните пару команд. Чтобы проверить, установлен ли Node, выполните:

        node -v

        Чтобы проверить, установлен ли Node, выполните:

        npm -v

        Помимо Node, вам понадобится установленный и запущенный сервер MySQL. Вы можете использовать автономный установщик MySQL или дистрибутивы серверов со встроенным MySQL, такие как WAMP (либо кросплатформенная сборке сервера XAMPP).

        Создание формы входа в систему на Node.js

        Начнем с создания новой папки для приложения и перейдем в нее с помощью командной строки с директивой cd:

        cd path/to/your/folder

        Затем — выполните следующую команду для установки зависимостей, необходимых для нашей формы:

        npm i express mysql dotenv hbs bcryptjs

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

        • Express: для создания API и веб-маршрутов и настройки бэкенда приложения.
        • Bcryptjs: для хэширования паролей.
        • MySQL: для подключения к нашему локальному серверу MySQL.
        • hbs: для рендеринга HTML на сервере.
        • dotenv: для хранения переменных окружения, которые не должны быть открыты в исходном коде приложения.

        Кроме того, мы рекомендуем установить nodemon, который автоматически перезапускает сервер при обнаружении изменений файлов, экономя время. Установите его с помощью следующей команды:

        npm i nodemon --save

        Наконец, запустите package.json с помощью любого удобного редактора и добавьте следующее поле в объект scripts:

        "start": "nodemon app.js"

        Теперь мы закончили с настройкой проекта. Далее — мы подключимся к БД MySQL и создадим таблицу для хранения информации о входе пользователей.

         

        Настройка подключения к базе данных в Node.js

        Три простых шага:

        1. Начните с создания новой базы данных в вашей среде MySQL (ее имя будет login-db).
        2. После этого — создайте таблицу users с ID, именем, email и паролем.
        3. Установите ID в INT и AUTOINCREMENT, имя, email и пароль в VARCHAR.

          В итоге база данных в phpMyAdmin будет выглядеть следующим образом:

          В нашем случае БД выглядит так

          В нашем случае БД выглядит так

        4. Затем — создайте файл .env в корневой папке вашего приложения. Внутри .env — добавьте имя базы данных, домен хоста, имя пользователя и пароль к соответствующим именам переменных. Вот значения по умолчанию для БД MySQL:
          DATABASE = login-db
          DATABASE_HOST = localhost
          DATABASE_ROOT = root
          DATABASE_PASSWORD =
        5. После установки переменных — создайте app.js-файл в корне. Откройте файл в текстовом редакторе и импортируйте следующие зависимости:
          const express = require('express');
          const mysql = require("mysql")
          const dotenv = require('dotenv')
        6. Затем— создайте приложение Express:
          const app = express();
        7. После этого — укажите путь к переменным окружения:
          dotenv.config({ path: './.env'})

          Здесь мы приказываем серверу найти .env в том же каталоге, что и app.js.

        8. Далее — обращаемся к переменным из process.env и передаем их в соответствующие свойства соединения:
          const db = mysql.createConnection({
              host: process.env.DATABASE_HOST,
              user: process.env.DATABASE_USER,
              password: process.env.DATABASE_PASSWORD,
              database: process.env.DATABASE
          })
        9. Теперь, когда мы настроили соединение с учетными данными базы данных, подключите базу данных:
          db.connect((error) => {
              if(error) {
                  console.log(error)
              } else {
                  console.log("MySQL connected!")
              }
          })
        10. Соединение будет успешным, либо — неудачным. В случае неудачи мы увидим error в обратном вызове. В противном случае — будет выведена строка "MySQL connected!"
        11. Наконец, запустите сервер, выполнив в terminal простейшую команду:
          npm start

        Если все прошло успешно, вы увидите, что MySQL is connected.

        Теперь, давайте создадим домашнюю страницу. Это не сложно.

        Настройка домашней страницы

        Вот алгоритм действий:

          1. В корне добавьте новую папку views.
          2. Затем в папке views создайте index.hbs, register.hbs и login.hbs. Как вы уже догадались, это файлы Handlebars для домашней страницы, страницы авторизации и страниц регистрации.
          3. Теперь для каждой из них включите базовую HTML-разметку:

            Базовая разметка


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

          4. Далее, внутри index.hbs, используйте следующую разметку в тегах body, чтобы добавить «джамботрон» на главную страницу вашего сайта:

            Разметка

          5. Затем укажите view engine в app.js (в качестве Handlebars):
            app.set('view engine', 'hbs')
          6. Оттуда же импортируйте path, чтобы указать статические активы, используемые в ваших шаблонах Handlebars:
            // other imports
            const path = require("path")
            
            const publicDir = path.join(__dirname, './public')
            
            app.use(express.static(publicDir))
          7. Затем — зарегистрируйте маршрут рендеринга index.hbs на главной странице:
            app.get("/", (req, res) => {
                res.render("index")
            })
          8. Наконец, настройте порт для приложения в app.listen():
            app.listen(5000, ()=> {
                console.log("server started on port 5000")
            })
          9. Запустите сервер, выполнив npm start, затем — перейдите на localhost:5000 для просмотра домашней страницы:

        Пример страницы авторизации на Node и MySQL
        Пример страницы авторизации на Node и MySQL

        Далее — создадим формы регистрации и входа.

        Создание форм входа и регистрации в Node.js

        Мы создадим HTML-форму с входами для имени пользователя, email, пароля и его подтверждения. Форма будет отправлять данные в маршрут, который мы указали в action.

        Вот пошаговая инструкция, как создать HTML-форму регистрации и авторизации.

        1. Откройте файл register.hbs во views и включите следующую разметку body и после nav :

          HTML разметка для register.hbs

        2. В app.js зарегистрируйте маршрут к странице регистрации и сохраните файл:
          app.get("/register", (req, res) => {
              res.render("register")
          })
        3. После этого — перейдите в браузер и выберите в навигационной панели пункт «Регистрация». Вы должны увидеть форму регистрации:

          Форма регистрации выводится корректно

          Форма регистрации выводится корректно

        Теперь настроим форму входа:

        1. Чтобы создать форму входа, откройте login.hbs внутри views и используйте ту же форму, что и выше.
        2. Удалите inputs и labels для подтверждения e-mail и пароля.
        3. Измените атрибуты id и название карточки с Register Form на другое название (например, Login Form).
        4. Далее — зарегистрируйте маршрут входа в app.js:
        app.get("/login", (req, res) => {
            res.render("login")
        })

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

        Форма выводится корректно, когда мы выбираем «Авторизация» на верхней панели
        Форма выводится корректно, когда мы выбираем «Авторизация» на верхней панели

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

        Регистрация пользователя

        Значения формы будут отправлены в маршрут /auth/register, когда регистрационная форма будет отправлена. Вот пошаговая инструкция, что нужно сделать:

          1. В app.js начните с импорта bcrypt:
            const bcrypt = require("bcryptjs")
          2. Далее — настройте сервер Express на получение значений формы в формате JSON:
            app.use(express.urlencoded({extended: 'false'}))
            app.use(express.json())
          3. Затем — создайте auth/register и получите значения формы пользователя:
            app.post("/auth/register", (req, res) => {    
                const { name, email, password, password_confirm } = req.body
            
                // db.query() code goes here
            })
          4. Теперь, когда у вас есть значения, сделайте запрос к базе данных, чтобы проверить, находится ли электронная почта на сервере. Таким образом, пользователь не сможет зарегистрироваться несколько раз с одним и тем же электронным адресом:
            db.query('SELECT email FROM users WHERE email = ?', [email], async (error, res) => {
                   // remaining code goes here
                })

            Если при выполнении запроса произошла ошибка, будет выведен статус error :

            if(error){
                        console.log(error)
                    }
                    // other code
          5. Затем проверьте, есть ли результат и совпадают ли два пароля. Если все условия верны, переделайте страницу регистрации, чтобы уведомить пользователя о том, что его email уже используется (либо, что указанные пароли различаются)
             if( result.length > 0 ) {
                        return res.render('register', {
                            message: 'This email is already in use'
                        })
                    } else if(password !== password_confirm) {
                        return res.render('register', {
                            message: 'Passwords do not match!'
                        })
                    }
                   // other code
          6. Если условия выше не являются истинными, пользователь будет добавлен в базу данных. Зашифруйте пароль и поместите его в базу данных вместе с другими значениями:
            let hashedPassword = await bcrypt.hash(password, 8)
            
                    db.query('INSERT INTO users SET?', {name: name, email: email, password: hashedPassword}, (err, res) => {
                        if(error) {
                            console.log(error)
                        } else {
                            return res.render('register', {
                                message: 'User registered!'
                            })
                        }
                    })
          7. Важно: для вывода пользовательских сообщений нужно поправить register.hbs и включить следующий шаблон под div:

             

            Пример кода

          8. Наконец, сохраните все изменения в файле и протестируйте поведение формы в браузере: Все работает корректно. Пользователь смогу отправить свои данные через форму.


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

         

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

        Резюме + советы по обучению

        Напоследок — мы подготовили 8 причин, почему стоит использовать Node:

        1. Неблокирующий код — самая веская причина выбрать Node в качестве сервера. 
        2. Node полностью ориентирован на события. Большая часть кода — выполняется на основе обратных вызовов. Такой подход помогает приложению не уходить в сон, а становиться доступным для других запросов.
        3. Быстрая обработка. Node использует движок V8 JavaScript Runtime (да, это движок, встроенный в широко известный Google Chrome). Node имеет собственную обертку над этим движком, что дает дополнительные возможности для создания веб-приложений. И обертка Node, и движок V8 JavaScript — написаны на C, что делает их действительно быстрыми. «Нод» действительно намного быстрее, чем тот же Ruby, Python или Perl.
        4. Обработка одновременных запросов. Node может обрабатывать сотни и даже тысячи соединений в одно время— с минимальными расходами на один процесс.
        5. Единая среда. Использование JavaScript как на веб-сервере, так и в браузере уменьшает несоответствие между двумя средами программирования, что позволяет передавать структуры данных через JSON (ведь они нужны по обе стороны). 
        6. Дублирующийся код валидации формы может быть разделен между сервером и клиентом. Практично и экономит время.
        7. Легко изучить. Node не является чем-то новым или чем-то принципиально сложным. По сути — этот тот же JavaScript. Поэтому разработчикам JavaScript не нужно прилагать много усилий для изучения Node.
        8. Популярность и сообщество. Многие начинающие изучать веб уже сталкивались с JavaScript. JS — один из самых популярных ЯП во всём мире. Популярный язык означает и популярное сообщество, большое количество обучающих материалов, книг и форумов. Большое сообщество гарантирует, что вы сможете получить помощь по любому, даже самому нестандартному вопросу.

        Для тех, кто хочет овладеть серверной разработкой и конкретно «Нодом», мы подготовили полноценный курс. Это программа для тех, кто уже хорошо разбирается в JavaScript, имеет опыт веб-разработки и знаком с основными технологиями. При помощи этого курса вы научитесь создавать серверную часть веб-приложений — всего з 6 недель. А чтобы изучение Node проходило максимально эффективно — обязательно возьмите на заметку нашу подборку лучших книг по «Нод». Это восемь книг, которые должен прочитать каждый, кто хочет сделать эту платформу своим основным инструментом.

         

        Node.js Серверный JavaScript
        Курс рассчитан на веб-разработчиков с опытом разработки на языке JavaScript и на выпускников курсов «Vue.js Продвинутая веб-разработка» или «Комплексное обучение JavaScript»
        • Node.js и серверный javascript
        • WebSocket и socket.io
        • Deploy
        • Серверный рендеринг и тестирование
        • Express.js и Koa.js
        Записаться

         

          Поделись публикацией

          Категории

          • Все записи блога
            • Трудоустройство
              • Истории выпускников LoftSchool
              • Полезные советы
            • Полезные ссылки
              • Книги
              • Инструменты
            • Новости школы
              • Команда LoftSchool
              • Информация о курсах
            • Статьи
              • Архив материалов
                • DevNews
                • DevShow
                • Loftnews
                • Loftschool
                • Loftvlog
                • Интервью
                • Видеоуроки
              • © 2012 - 2023 LOFT

                Школа онлайн образования

              • © 2012 - 2023 LOFT

                Школа онлайн образования

                • +7 (800) 600 09 54
                • +7 (812) 339 22 01
                • [email protected]
                УчастникSkolkovo
              • Полезная рассылка

                Подпишись, чтобы быть в курсе наших новостей, акций и скидок.

              • Полезное
                • О нас
                • Карта курсов
                • B2B
                • Работодателям
                • Партнерская программа
                • Вакансии
                • Стать автором
                • Подарочные сертификаты
                • Вебинары
                • Блог
                • FAQ
              • Информация
                • Публичная оферта портала
                • Политика конфиденциальности
                Безопасная передача данных