Как запустить сервер на node js
Перейти к содержимому

Как запустить сервер на node js

  • автор:

Всё что вам нужно знать о Node.js

В наши дни платформа Node.js является одной из самых популярных платформ для построения эффективных и масштабируемых REST API’s. Она так же подходит для построения гибридных мобильных приложений, десктопных программ и даже для IoT.

Я работаю с платформой Node.js более 6 лет и я на самом деле люблю её. Этот пост главным образом пытается быть путеводителем по тому, как Node.js работает на самом деле.

Мир до Node.js

Многопоточный сервер

Веб-приложения, написанные следуя клиент/серверной архитектуре, работают по следующей схеме — клиент запрашивает нужный ресурс у сервера и сервер отправляет ресурс в ответ. В этой схеме сервер, ответив на запрос, прерывает соединение.

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

Значит ли это, что сервер может обрабатывать только один запрос за раз? Не совсем! Когда сервер получает новый запрос он создаёт отдельный поток для его обработки.

Поток, если простыми словами, это время и ресурсы, что CPU выделаят на выполнение небольшого блока инструкций. С учётом сказанного, сервер может обрабатывать несколько запросов одновременно, но только по одному на поток. Такая модель так же называться thread-per-request model.

Для обработки N запросов серверу нужно N потоков. Если сервер получает N+1 запросов, тогда он должен ждать пока один из потоков не станет доступным.

На рисунке выше, сервер может обрабатывать до 4 запросов (потоков) единовременно и когда он получает следующие 3 запроса, эти запросы должны ждать пока любой из этих 4 потоков не станет доступным.

Один из способов избавиться от ограничений — добавить больше ресурсов (памяти, ядер процессора и т. д.) на сервер, но это не самое лучшее решение….

И, конечно, не забываем о технологических ограничениях.

Блокирующий ввод/вывод

Ограниченное число потоков на сервере не единственная проблема. Возможно, Вам стало интересно почему один поток не может обрабатывать несколько запросов одновременно? всё из-за блокирующих операций ввода/вывода.

Допустим, Вы разрабатываете онлайн магазин и Вам нужна страница где пользователь может просматривать список всех товаров.

Пользователь стучится на http://yourstore.com/products и сервер рендерит HTML файл со всеми продуктами с базы данных в ответ. Совсем не сложно, да?

Но, что же происходит за кулисами?

  • Когда пользователь стучится на /products особый метод или функция должна выполниться, что бы обработать запрос. Маленький кусочек кода (Ваш или фреймворка) анализирует URL-адрес запроса и ищет подходящий метод или функцию. Поток работает.
  • Теперь нужный метод или функция выполняется, так как и в первом пункте — поток работает.
  • Так как Вы хороший разработчик, Вы сохраняете все системные логи в файл, ну и конечно же, что бы быть уверенными, что роутер выполняет нужный метод/функцию — Вы так же логируете строку “Method X executing!!». Но всё это блокирующие операции ввода/вывода. Поток ждёт.
  • Все логи сохранены и следующие строки функции выполняются. Поток работает снова.
  • Время обращаться к базе данных и получать все продукты — простой запрос, вроде SELECT * FROM products , выполняет свою работу, но угадайте что? Да-да, это блокирующая операция ввода/вывода. Поток ждёт.
  • Вы получили массив или список всех продуктов, но убедитесь, что Вы всё это залогировали. Поток ждёт.
  • Теперь у Вас есть все продукты и пришло время рендерить шаблон для будущей страницы, но перед этим Вам нужно их прочитать. Поток ждёт.
  • Движок рендеринга делает свою работу и шлёт ответ клиенту. Поток работает снова.
  • Поток свободен, словно птица в небесах.

На сколько медленны операции ввода/вывода? Ну это зависит от конкретной. Давайте обратимся к таблице:

Операции сети и чтения с диска слишком медленные. Представьте сколько запросов или обращений к внешним API ваша система могла бы обработать за это время.

Подбивая итоги: операции ввода/вывода заставляют поток ждать и тратить ресурсы впустую.

Проблема C10K

Проблема

C10k (англ. C10k; 10k connections — проблема 10 тысяч соединений)

В ранние 2000-е, серверные и клиентские машины были медленными. Проблема возникала при параллельной обработке 10 000 клиентских соединений к одной машине.

Но почему традиционная модель thread-per-request (поток на запрос) не могла решить эту проблему? Что ж, давайте используем немного математики.

Нативная реализация потоков выделаят больше 1 Мб памяти на поток, выходя из этого — для 10 тысяч потоков требуется 10 Гб оперативной памяти и это только для стека потоков. Да, и не забывайте, мы в начале 2000-х!!

В наши дни серверные и клиентские компьютеры работают быстрее и эффективней и почти любой язык программирования или фреймворк справляются с этой проблемой. Но фактически проблема не исчерпана. Для 10 миллионов клиентских соединений к одной машине проблема возвращается вновь (но теперь она C10M Problem).

JavaScript спасение?

Осторожно, спойлеры.
Node.js на самом деле решает проблему C10K… но как?!

Серверный JavaScript не был чем-то новым и необычным в начале 2000-х, на тот момент уже существовали реализации поверх JVM (java virtual machine) — RingoJS и AppEngineJS, что работали на модели thread-per-request.

Но если они не смогли решить проблему, тогда как Node.js смог?! Всё из-за того, что JavaScript однопоточный.

Node.js и цикл событий

Node.js

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

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

Давайте напишем маленький пример:

Non-blocking I/O

Node.js использует неблокирующие ввод/вывод операции, что же это значит:

  • Главный поток не будет блокироваться операциями ввода/вывода.
  • Сервер будет продолжать обслуживать запросы.
  • Нам придётся работать с асинхронным кодом.

Давайте напишем пример, в котором на запрос к /home сервер в ответ шлёт HTML страницу, а для всех других запросов — ‘Hello World’. Что бы отослать HTML страницу сначала ее нужно прочитать из файла.

Если запрашиваемый url-адрес /home , тогда используется нативный модуль fs для чтения файла home.html .

Функции что попадают в http.createServer и fs.readFile как аргументы — колбэки. Эти функции будут выполнены в какой-то из моментов в будущем (Первая, как только сервер получит запрос, а вторая — когда файл будет прочитан с диска и помещён в буфер).

Пока файл считывается с диска, Node.js может обрабатывать другие запросы и даже считывать файл снова и всё это в одном потоке… но как?!

Цикл событий

Цикл событий — это магия, которая происходит внутри Node.js. Это буквально бесконечный цикл и на самом деле один поток.

Libuv — C библиотека которая реализует этот паттерн и является частью ядра Node.js. Вы можете узнать больше о libuv здесь.

Цикл событий имеет 6 фаз, каждое исполнение всех 6 фаз называют tick-ом.

  • timers: в этой фазе выполняются коллбэки, запланированные методами setTimeout() и setInterval() ;
  • pending callbacks: выполняются почти все коллбэки, за исключением событий close , таймеров и setImmediate() ;
  • idle, prepare: используется только для внутренних целей;
  • poll: ответственен за получение новых событий ввода/вывода. Node.js может блокироваться на этом этапе;
  • check: коллбэки, вызванные методом setImmediate() , выполняються на этом этапе;
  • close callbacks: например, socket.on(‘close’, . ) ;

Хорошо, есть только один поток, и этот поток и есть цикл событий, но тогда кто выполняет все операции ввода/вывода?

Обратите внимание.
Когда циклу событий нужно выполнить операцию ввода/вывода он использует поток ОС с тредпула (thread pool), а когда задача выполнена, коллбэк ставится в очередь во время фазы pending callbacks.

Разве это не круто?

Проблема CPU-ёмких задач

Node.js кажется идеальным! Вы можете создавать всё, что захотите.

Давайте напишем API для вычислений простых чисел.

Простое число — это целое (натуральное) число больше единицы и делимое только на 1 и на само себя.

Дано число N, API должен вычислять и возвращать первые N простых чисел в список (или массив).

prime.js это реализация нужных вычислений: функция isPrime проверяет является ли число простым, а nthPrime возвращает N таких чисел.

Файл же index.js отвечает за создание сервера и использует модуль prime.js для обработки каждого запроса на /primes . Число N прокидывается через строку запроса в URL-адресе.

Что бы получить первых 20 простых чисел нам нужно сделать запрос на http://localhost:8080/primes?n=20 .

Предположим, к нам стучатся 3 клиента и пытаются получить доступ к нашему не блокирующемуся вводом/выводом API:

  • Первый запрашивает 5 простых чисел каждую секунду.
  • Второй запрашивает 1000 простых чисел каждую секунду
  • Третий запрашивает 10 000 000 000 простых чисел, но…

Когда третий клиент шлёт запрос — главный поток блокируется и это главный признак проблемы CPU-ёмких задач. Когда главный поток занят исполнением «тяжёлой» задачи он становится недоступен для других задач.

Но как насчёт libuv? Если Вы помните, эта библиотека помогает Node.js исполнять операции ввода/вывода с помощью потоков ОС избегая блокировки главного потока и Вы абсолютно правы, это решение нашей проблемы, но для того, что бы это стало возможным, наш модуль должен быть написан на языке C++, что бы libuv могла с ним работать.

К счастью, начиная с v10.5 в Node.js добавлен нативный модуль Worker Threads.

Воркеры и их потоки

Воркеры полезны для выполнения CPU-ёмких JavaScript операций; не используйте их для операций ввода/вывода, уже встроенные в Node.js механизмы более эффективно справляться с такими задачи, чем Worker thread.

Исправление кода

Пришло время переписать наш код:

В файле index-workerthreads.js при каждом запросе на /primes создаётся экземпляр класса Worker (с нативного модуля worker_threads ) для выгрузки и исполнения файла primes-workerthreads.js в поток воркера. Когда список простых чисел просчитан и готов, инициируется событие message – результат попадает в главный поток из-за того, что у воркера не осталось работы он также инициирует событие exit , позволяя основному потоку отправлять данные клиенту.

primes-workerthreads.js изменён немного. Он импортирует workerData (это копия параметров, переданных с основного потока) и parentPort через который результат роботы воркера передаётся назад в главный поток.

Теперь давайте испробуем наш пример снова и посмотрим, что случиться:

Основной поток больше не блокируется.

Теперь всё работает как нужно, но плодить воркеры без всяких на то причин все же не лучшая практика, создавать потоки не дешёвое удовольствие. Обязательно создайте пул потоков перед этим.

Заключение

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

Это всё на сегодня, ребята. Я надеюсь этот пост был полезен для Вас и вы узнали что-то новое о Node.js.

Изучаем серверное программирование на JavaScript с Node.js

На данный момент множество разработчиков говорят о Node.js, создавая высоконагруженные приложения, работающие в реальном времени. С Node.js вы можете использовать JavaScript как на клиенте, так и на сервере. В данном туториале мы установим Node и создадим вашу первую «Hello World» программу — масштабируемый сервер для стриминга Twitter сообщений.

Что такое Node.js?

NodeJSNodeJSNodeJS

Чаще всего JavaScript выполняется исключительно на стороне клиента, веб-браузера, но с недавних пор разработчики заинтересовались использование его на сервере, во многом благодаря проекту CommonJS. Из других заметных серверных JavaScript сред стоить отметить Jaxer и Narwhal. Однако Node.js отличается от подобных решений, так как в своей основе он работает следуея концепции событий, нежели потоков. Веб-сервер Apache к примеру, который обрабатывает PHP и другие CGI скрипты, основан на потоках, он создает отдельный поток для каждого запроса. Конечно этот подход работает для большинства приложений, однако модель основанная на потоках не подходит для приложений с продолжительным подключение в реальном времени, на подобии приложений как Friendfeed и Google Wave.

«Каждое действие с вводом/выводом (I/O) — асинхронное. «

Node.js использует цикл событий вместо потоков и способен поддерживать миллионы одновременных соединений. Недостаток данной модели заключается в том, что большинство серверов тратят большую часть времени ожидая операций по вводу/выводу, такие операции как чтение файла с жёсткого диска, получения доступа к удалённому веб-серверу или ожидание конца загрузки файл, данные операции гораздо медленнее, чем операции по работе с памятью. Каждое действие с вводом/выводом — асинхронное, это означает, что сервер может продолжать обрабатывать входящие запросы, во время операций по вводу/выводу. JavaScript отлично подходит для программирования основанного на событиях, он обладает анонимными функциями и замыканиями, что позволяет с легкостью создавать каллбеки и JavaScript разработчики уже знакомы с подобным способом программирования. Данная событийная модель делает Node.js невероятно быстрым и позволяет без проблем масштабировать приложения в реальном времени.

Шаг 1 установка

Node.js работает на Unix подобных системах, к примеру Mac OS X, Linux b FreeBSD. К сожалению Windows не поддерживается на данный момент времени, так что если вы пользователь Windows, можно воспользоваться установленной на Virtualbox Ubuntu. Чтобы это сделать, ознакомтесь со следующим туториалом. Вы должны воспользоваться терминалом для установки и запуска Node.js.

  1. Скачайте последний релиз Node.js с nodejs.org (на момент написания данной статьи, последняя версия — 0.1.31) и распакуйте zip архив.
  2. Откройте терминал и запустите следующие команды.

cd /path/to/nodejs
make
sudo make install

Шаг 2 Hello World!

Любое знакомство с новой технологией начинается с туториала «Hello World!», мы создадим простой HTTP сервер, который будет отправлять данное сообщение. Однако для начала, вы должны понять систему модулей Node.js. В Node функционал инкапсулирован в модули и для того, чтобы он работал нам предварительно следует загрузить интересующий нас модуль. Существует множество модулей, со списком можно ознакомиться в Node.js документации. Загрузить модуль можно с помощью функции require :

var sys = require("sys"); 

Данный пример загружает модуль sys, который содержит функции для выполнения системных задач, допустим вывод сообщения в терминал. Чтобы воспользоваться функцией модуля, вызовите её с помощью переменной в которую был сохранён данный модуль, в нашем случае sys .

sys.puts("Hello World!"); 

Запуск этих двух строчек кода также прост, как запуск команды node с именем javascript файла в качестве аргумента.

node test.js

Этот пример выведет «Hello World!» в терминал, после того, как будет запущен.

Для создания HTTP сервера, нам нужно будет вызвать require для http модуля.

var sys = require("sys"), 
http = require("http"); 
http.createServer(function(request, response)  
response.sendHeader(200, "Content-Type": "text/html">); 
response.write("Hello World!"); 
response.close(); 
>).listen(8080); 
sys.puts("Server running at http://localhost:8080/"); 

Этот скрипт импортирует sys и http модули и создаёт HTTP сервер. Анонимная функция передаваемая в http.createServer будет вызвана, каждый раз когда совершается запрос к серверу. Как только сервер будет создан, он будет прослушивать порт 8080. Когда приходит запрос к серверу, сначала отправляем хедер с типом контента (content type) и статус кодом 200 — успешно (successful). Затем мы посылаем «Hello World!» и закрываем соединение. После чего вы можете заметить, как мы явно закрываем соединение. Таким образом мы можем просто передавать данные клиенту, не закрывая соединения. Если запустить данный скрипт и перейти по адресу в браузере — http://localhost:8080/ , вы увидите «Hello World!»

Шаг 3 простой статичный файловый сервер

Хорошо, мы создали HTTP сервер, но кроме «Hello World» ничего не посылается, не важно какой адрес мы введём. Любой HTTP должен быть способен посылать статичные файлы, такие как HTML, изображение и другие файлы. Код ниже делает следующее:

var sys = require("sys"), 
http = require("http"), 

Как установить Node.js + npm на хостинг?

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

NPM, сокращенно от Node Package Manager — это стандартный менеджер пакетов для Node.js и крупнейший в мире репозиторий программного обеспечения для публикации с открытым исходным кодом Node.js пакетов.

Для установки Node.js и npm необходимо подключиться по SSH к серверу хостинга.

Инструкции по подключению Вы можете найти в разделе [РАБОТА С SSH].

Установка Node.js на хостинг возможна через NVM (Node Version Manager).

1. После подключения на сервер, прямо в начальной директории Вашего хостинг-аккаунта, выполните следующую команду для установки NVM :

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

Скрипт скопирует NVM репозитарий с Github в «$HOME/.nvm» и добавит путь к скрипту в локальный Bash профиль хостинг аккаунта.

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

команды, которые добавят путь к NVM в текущую сессию.

export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # Эта команда загрузит nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # Эта загрузит nvm bash_completion

Что бы проверить корректность устновки NVM и установленную версию, введите команду

nvm --version

Вывод должен быть такого вида:

0.35.3

2. Теперь, когда NVM установлен, можно установить последню доступную версию Node.js. Для этого нужно ввести команду:

nvm install node

Корректность установки и версию Node.js можно проверить командой:

node --version

Пример вывода команды:

v15.5.1

3. Для установки npm используйте команду:

curl https://npmjs.org/install.sh | bash

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

npm --version

Создание проекта начинается с иницализации командой:

npm init

Все категории вопросов

  1. Общие вопросы по услуге хостинга
  2. Робота с хостинг 2.0
  3. Работа с базами данных [MySQL]
  4. Работа с FTP
  5. Работа с SSH
  6. Работа с почтой
  7. Работа с Cron
  8. Работа с SSL
  9. Работа с резервным копированием
  10. Работа с htaccess
  11. Работа с CMS
  12. Дополнительные услуги
  13. Нагрузка
  14. Ошибки на сайте
  15. Конструктор сайтов
  1. Регистрация и продление доменов
  2. Управление DNS-записями домена
  3. Трансфер домена
  4. Смена контактных данных владельца домена
  5. Настройка CloudFlare
  1. Общие вопросы по серверам
  2. Администрирование виртуального сервера (VPS)
  3. Администрирование выделенного сервера (DS)
  4. Инструкции по Windows Server
  5. Инструкции по Linux
  6. Панель управления FASTPANEL
  7. Панель управления Hestia CP
  8. Панель управления Vesta CP
  1. Платный SSL-сертификат
  2. Файловое хранилище
  3. SMS-сервис
  4. CallBack-сервис

Чем на самом деле является Node.js?

Node.js это — среда выполнения JavaScript. Что же это значит, и как работает?
Окружение Node.js включает все, что вам нужно для выполнения программы, написанной на JavaScript.

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

Теперь вы можете сделать гораздо больше с JavaScript, чем просто интерактивные веб-сайты.

Теперь у JavaScript есть возможность делать то, что могут делать другие скриптовые языки программирования, такие как Python.

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

Почему Node.js?

Вот формальное определение, данное на официальном сайте Node.js:

— Node.js — среда выполнения JavaScript, основанная на JavaScript движке V8 из Chrome.
— Node.js использует управляемую событиями, неблокирующую модель ввода-вывода, которая делает ее легкой и эффективной.
— Пакетная экосистема Node.js, npm, является самой большой экосистемой библиотек с открытым исходным кодом в мире.

Мы уже обсуждали первую строку этого определения: «Node.js — среда выполнения JavaScript, основанная на JavaScript движке V8 из Chrome». Теперь давайте разбираться в двух других строках, так мы сможем понять, почему Node.js так популярен.

I/O означает ввод/вывод. Это может быть что угодно: от чтения/записи локальных файлов до HTTP-запроса в API. I/O занимает время и, следовательно, блокирует другие функции.

Рассмотрим сценарий, в котором мы запрашиваем user1 и user2 из бекенда, а затем печатаем их на экране / в консоли. Ответ на этот запрос требует времени, но оба запроса пользовательских данных могут выполняться независимо и в одно и то же время.

Блокирование ввода-вывода

В методе блокировки запрос данных user2 не запускается до тех пор, пока данные user1 не будут напечатаны на экране.

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

Неблокирующий ввод-вывод

С другой стороны, используя неблокирующий запрос, вы можете инициировать запрос данных для user2, не дожидаясь ответа на запрос user1. Вы можете инициировать оба запроса параллельно.

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

Цикл событий JavaScript

Если у вас есть 26 минут, посмотрите отличное видео-объяснение Node Event Loop:

Если нету, вот пошаговое объяснение того, как работает Event Loop в JavaScript:

1. Посылаете main() в стек вызовов.

2. Посылаете console.log() в стек вызовов. Он запускается сразу и появляется.

3. Посылаете setTimeout(2000) в стек. setTimeout(2000) это — Node API. Когда мы его вызываем, мы регистрируем пару событие-коллбек. Событие будет ждать 2000 миллисекунд, а потом вызовет коллбек.

4. После регистрации, setTimeout(2000) появляется в стеке вызовов.

5. Теперь второй setTimeout(0) регистрируется таким же образом. Теперь у нас есть два API-интерфейса Node, ожидающих выполнения.

6. После ожидания 0 секунд setTimeout(0) перемещается в очередь выполнения коллбеков (callback queue), и то же самое происходит с setTimeout(2000).

7. В очереди выполнения коллбеков функции ждут, когда стек вызовов будет пустым, потому что только одна функция может выполняться одновременно. Это обеспечивает event loop.

8. Вызывается последняя console.log(), а main() вызывается из стека вызовов.

9. Цикл событий видит, что стек вызовов пуст, а очередь обратного вызова — нет. Таким образом, он перемещает обратные вызовы (по порядку) в стек вызовов для выполнения.

Npm

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

Require

Require исполняет три функции:

Загружает модули, поставляемые в комплекте с Node.js, например из файловой системы или HTTP, из API Node.js.
Загружает сторонние библиотеки, такие как Express и Mongoose, которые вы устанавливаете из npm.
Позволяет создавать собственные файлы и делить проект на модули.
Require — это функция, и она принимает параметр «путь» и возвращает module.exports.

Node модули

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

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

V8 ускоряет JavaScript, используя C ++

V8 – движок с открытым исходным кодом, написанный на C ++.

JavaScript -> V8 (C ++) -> машинный код

V8 реализует сценарий ECMAScript, как указано в ECMA-262. ECMAScript был создан Ecma International для стандартизации JavaScript.

V8 может работать автономно или может быть встроен в любое приложение C ++. Благодаря этому, вы можете написать свой собственный код на C ++, и сделать его доступным для JavaScript.

События

События – это все, что произошло в нашем приложении, и на что мы можем ответить.

В Node есть два типа событий:

  • Системные события: ядро C ++ из библиотеки libuv. (Например, окончание чтение файла).
  • Пользовательские события: ядро JavaScript.

Пишем Hello World в Node.js

Почему бы и нет?

Создайте файл app.js и добавьте к нему следующее.

console.log («Hello World!»);

Откройте терминал Node, измените каталог на папку, в которой сохранен файл, и запустите node app.js.

Вуаля — вы только что написали «Hello World» в Node.js.

Существует огромное количество ресурсов, которые вы можете использовать, чтобы узнать больше о Node.js, включая freeCodeCamp.org.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *