Поиск по сайту:

Что такое Node.JS и для чего он используется?


Если вы занимаетесь какой-либо веб-разработкой, вам, вероятно, в какой-то момент придется изучить и написать JavaScript. Node предназначен для упрощения разработки веб-приложений за счет объединения серверного и клиентского языков.

Что такое узел?

Node.JS, обычно называемый просто Node, представляет собой среду выполнения JavaScript, которая позволяет запускать код JS вне веб-браузера. Node построен на движке Google V8 JavaScript, который используется для обработки в Chrome.

Он обычно используется для создания приложений, работы с современными платформами веб-приложений и написания сценариев на стороне сервера с помощью JS. На практике Node позволяет запускать файлы .js с помощью команды node аналогично тому, как вы запускаете файлы .py с помощью python. :

node main.js

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

Node также используется для создания настольных приложений с помощью фреймворка Electron. Электрон поддерживает Slack, Discord, Visual Studio Code и Skype. По сути, он запускает урезанную версию Chrome, предназначенную для настольных компьютеров, а само приложение на самом деле является просто веб-приложением. Как следствие, приложения Electron очень требовательны к оперативной памяти и будут работать немного хуже, чем их нативные аналоги, но эта сделка часто делается для единообразия во всех операционных системах и в Интернете.

Экосистема узла (модули npm)

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

Например, предположим, что вы работаете над скриптом и вам нужно сделать POST-запрос к внешнему ресурсу. Вы можете использовать встроенный в JS метод fetch или использовать axios, который использует промисы и более прост в использовании. Если вы хотите добавить аксиомы в свой проект, переместите скрипт в отдельную папку и запустите:

npm init
npm install axios

При этом создается файл с именем package.json, в котором хранятся настройки проекта и установленные пакеты. Команда npm install создаст папку с именем node_modules, в которой хранятся загруженные модули. Имейте в виду, что эта папка может быть очень большой в больших проектах с большим количеством модулей.

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

const axios = require('axios');

Или в синтаксисе ES6:

import axios from 'axios';

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

Axios — это просто базовый пример полезной утилиты npm . Вы, наверное, слышали о других модулях, таких как React, Angular или Vue; все они представляют собой полные фреймворки веб-приложений, используемые для создания интерактивных приложений, которые запускаются в браузере. Приложения, созданные с помощью этих платформ, обычно называются «приложениями Node». Хотя на самом деле они не работают с Node, поскольку конечным продуктом будет статический HTML, который вы можете использовать на любом старом веб-сервере, Node используется для разработки, а пакеты устанавливаются из экосистемы Node с помощью npm .

В конце концов, это все JavaScript. Часто код разработки использует JavaScript «нового поколения», такой как ES6, и компилируется с помощью Webpack и Babel в один большой файл «bundle.js», который может быть передан клиенту для запуска.

Как Node работает с nginx и Apache?

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

С React вы, по сути, обслуживаете пустую HTML-страницу, которая загружает файл bundle.js . Этот пакетный файл работает как любой другой файл javaScript, и вы можете использовать nginx или Apache в качестве веб-сервера для его размещения. Пакет загружает React, который затем отрисовывается на веб-странице и отображает ваш контент. Все содержимое содержится в файле пакета.

Стоит отметить популярную библиотеку Express. Express обслуживает веб-контент и может работать как HTTP-сервер. Он обычно используется в качестве маршрутизатора для создания REST API на основе узла; Express может прослушивать порт, пересылать запрос другой функции (обычно обращаясь к другому ресурсу, например к базе данных), а затем отправлять ответ HTTP.

В этом случае вы поместите Express за сервером nginx, который используете для своего статического контента, и направите все маршруты /api на Express. Это позволяет вашему веб-приложению получать доступ к внешним ресурсам и в полной мере использовать возможности сценариев Node на стороне сервера и возможности взаимодействия с базами данных. Вы можете использовать nginx в качестве обратного прокси-сервера для маршрута /api и использовать его в качестве веб-сервера для другого статического контента.

Однако Express не является веб-сервером. В этом примере он не должен заменять nginx. Он может работать как единое целое, и очень полезно настроить простой сервер Express для разработки или простую страницу, которая не получает большого трафика. Но это далеко от производительности nginx и Apache, которые являются нативными приложениями. Если вы создаете настоящее веб-приложение, обслуживайте его с помощью nginx и используйте Express только для обслуживания API.

Должен ли я использовать Node для своего веб-сайта?

Вы создаете веб-приложение? Если да, то вам следует серьезно подумать о Node. Альтернативами могут быть Ruby on Rails, Laravel с PHP и Django с Python. Но у Node на сегодняшний день самое большое сообщество и большой выбор фреймворков. Если вам не нравится Ruby on Rails, вы застряли с ним без изучения другого языка, но переход от такой среды, как React, к Vue намного проще, поскольку они оба являются JavaScript.

Если вы не создаете веб-приложение, вам, вероятно, не нужен Node. Он не предназначен для статических страниц. Вы, конечно, можете, но особой пользы от этого не увидите. Если вы планируете использовать полную веб-инфраструктуру, такую как React, для статического (или даже в основном статического) сайта, вы можете пересмотреть свое решение, поскольку React вносит много накладных расходов на ваш сайт. Время загрузки React, как правило, намного медленнее без рендеринга на стороне сервера, что хорошо для веб-приложений, предназначенных для длительных сеансов, но не для блога или чего-либо, что требует хорошего SEO. Vanilla JS может самостоятельно выполнять некоторые манипуляции с DOM, особенно с помощью jQuery.