Skip to content

Введение в Node.js

Node.js — это кроссплатформенная среда выполнения JavaScript с открытым исходным кодом. Это популярный инструмент практически для любого типа проекта!

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

Приложение Node.js работает в одном процессе, не создавая новый поток для каждого запроса. Node.js предоставляет набор асинхронных I/O примитивов в своей стандартной библиотеке, которые предотвращают блокировку кода JavaScript, и, как правило, библиотеки в Node.js написаны с использованием неблокирующих парадигм, что делает блокирующее поведение исключением, а не нормой.

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

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

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

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

Пример приложения Node.js

Наиболее распространенный пример «Hello World» для Node.js — это веб-сервер:

js
import { createServer } from 'node:http'
const hostname = '127.0.0.1'
const port = 3000
const server = createServer((req, res) => {
  res.statusCode = 200
  res.setHeader('Content-Type', 'text/plain')
  res.end('Hello World')
})
server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`)
})

Чтобы запустить этот фрагмент, сохраните его как файл server.js и запустите node server.js в вашем терминале. Если вы используете версию кода mjs, вы должны сохранить его как файл server.mjs и запустить node server.mjs в вашем терминале.

Этот код сначала включает модуль http Node.js.

Node.js имеет фантастическую стандартную библиотеку, включая первоклассную поддержку работы в сети.

Метод createServer() объекта http создает новый HTTP-сервер и возвращает его.

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

Всякий раз, когда поступает новый запрос, вызывается событие request, предоставляющее два объекта: запрос (объект http.IncomingMessage) и ответ (объект http.ServerResponse).

Эти 2 объекта необходимы для обработки HTTP-вызова.

Первый предоставляет детали запроса. В этом простом примере он не используется, но вы можете получить доступ к заголовкам запроса и данным запроса.

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

В этом случае с помощью:

js
res.setHeader('Content-Type', 'text/plain')

мы устанавливаем свойство statusCode в 200, чтобы указать на успешный ответ.

Мы устанавливаем заголовок Content-Type:

js
res.setHeader('Content-Type', 'text/plain')

и закрываем ответ, добавляя содержимое в качестве аргумента к end():

js
res.end('Hello World')

Это отправит ответ клиенту.