Начало работы с node.js
node.js — полностью самостоятельная платформа, включающая, кроме движка, встроенный сервер (HTTP и TCP/UDP/Unix-soket) и базовый набор библиотек, а также предоставляющей полностью асинхронную работу с файлами и сетевыми устройствами. Фреймворк node.js основан на JavaScript движке Google V8. Движок V8 написан на C++.
Основное преимущество node.js неблокирующий ввод/вывод, то есть все запросы обрабатываются параллельно, не пересекаясь.
node.js 0.6 (нечётные ветки - экспериментальные, а чётные (0.2, 0.4, 0.6) - стабильные).
IDE с поддержкой node.js:
- AWS Cloud9 IDE IDE,
- VJET JavaScript IDE,
- Komodo Edit или Komodo IDE начиная с 7 версии,
- Apache NetBeans IDE: Настройка, оптимизация и решение проблем с обновлением NetBeans alpha update center.
- IDE Nide для Node.js.
Три основных типа программ созданные на Node
Программы Node делятся на три основных типа: веб-приложения, средства командной строки и демоны и настольные приложения.
К категории веб-приложений относятся простые приложения, предоставляющие одностраничные приложения, микрослужбы REST и веб-приложения полного стека. Возможно, вы уже использовали средства командной строки, написанные с использованием Node, например npm, Gulp и webpack. Демоны (daemons) представляют собой фоновые службы. Хорошим примером служит менеджер процессов PM2. Настольные приложения обычно строятся с применением фреймворка Electron (http://electron.atom.io/), использующего Node во внутренней реализации для на стольных веб-приложений.
Существуют некоторые типы приложений, в которых Node особенно заметно превосходит конкурентов. Node обычно используется для создания веб-приложений реального времени; к этой категории может относиться что угодно, от пользовательских приложений (скажем, чат-серверов) до внутренних систем сбора аналитики.
Установка node.js
Простейший способ установить Node на Mac или Windows — использовать программу установки с сайта https://nodejs.org. Установка node.js при помощи nvm.
node.js не имеет внешних зависимостей, кроме Python, который используется при сборке.
Рабочее окружение:
# uname -a Linux 3.0.0-12-generic #20-Ubuntu SMP Fri Oct 7 14:56:25 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux # apt show nodejs Version: 0.4.9-1ubuntu3 Depends: libc-ares2 (>= 1.7.3), libc6 (>= 2.6), libev4 (>= 1:4.04), libgcc1 (>= 1:4.1.1), libssl1.0.0 (>= 1.0.0), libstdc++6 (>= 4.1.1), libv8-3.1.8.22
Установка node.js 4.9 из репозитория Ubuntu:
# apt install nodejs libc-ares2 libev4 libv8-3.1.8.22
Установка node.js 0.6.0 последней стабильной версии:
# apt install libc-ares2 libev4 libv8-3.1.8.22 libssl-dev g++ apache2-utils # mkdir /opt/nodejs # cd /opt/nodejs # wget -c http://nodejs.org/dist/v0.6.0/node-v0.6.0.tar.gz # tar -xvf node-v0.6.0.tar.gz # cd node-v0.6.0/ # ./configure Checking for program g++ or c++ : /usr/bin/g++ Checking for program cpp : /usr/bin/cpp Checking for program ar : /usr/bin/ar Checking for program ranlib : /usr/bin/ranlib Checking for g++ : ok Checking for program gcc or cc : /usr/bin/gcc Checking for gcc : ok Checking for library dl : yes Checking for openssl : yes Checking for library util : yes Checking for library rt : yes Checking for fdatasync(2) with c++ : yes 'configure' finished successfully (0.514s) # make # make install
Проверяем:
$ which node /usr/local/bin/node $ /usr/local/bin/node -v v0.6.0
Для обновления node.js до следующей версии процедура аналогичная - ничего удалять не надо, инсталлятор все заменит сам.
Создание нового проекта Node
Создать новый проект Node несложно: создайте папку и выполните команду npm init. И все! Команда npm задаст несколько вопросов, вы можете ответить на все вопросы утвердительно. Полный пример:
mkdir my_module cd my_module npm init -y
Флаг -y означает подтверждение (yes). Таким образом, npm создаст файл package. json со значениями по умолчанию. Если вы хотите полностью управлять процессом создания проекта, опустите флаг -y; npm задаст ряд вопросов о лицензии проекта, имени автора и т. д. После того как все будет сделано, просмотрите содержимое файла package.json. Вы можете отредактировать его вручную, но помните: файл должен содержать корректную разметку JSON. Пустой проект успешно создан, теперь можно переходить к созданию модуля.
Debug Node.js
Ключ debug включает в Node.js клиента отладчика V8, который становится доступен на порту 5858 протокола TCP. Отладчик Node не поддерживает полный набор команд но выполнение и просмотр окружения вполне возможны.
Например можно запустить из скрипта:
#!/bin/sh NODE='/opt/nodejs/node-v0.6.0/out/Release/node' SRV='/var/www/nodejs/node_http_srv.js' #$NODE $SRV >> /var/log/nodesrv.log 2>&1 & # Debug $NODE --debug $SRV >> /var/log/nodesrv.log 2>&1 &
Подключаемся к отладчику при помощи Примеры использования telnet
$ telnet localhost 5858
Модули и объекты
Вместе с Node.js поставляется несколько стандартных встроенных модулей, они находятся в папке lib/ исходного кода node. Модули кешируются при первой загрузке. Для того, чтобы определить, какой модуль был загружен при вызове require(), можно воспользоваться функцией require.resolve().
Стандартные встроенные модули:
- Модуль querystring предоставляет инструменты для работы со строкой запроса.
- Объект console v0.6.x Enconsole v0.4.x RU для вывода в стандартный поток вывода stdout и стандартный поток ошибок stderr
- Поддержка json встроена в node.js. Manipulating JSON and XML with Node.js.
- Модуль child-process позволяет работать с дочерними процессами: порождать их, передавать и получать информацию в асинхронном режиме, управлять работой потока.
Фреймворки для Node.js:
- Фреймворк Express отличается высокой производительностью. Много разных плюшек. Большая часть функционала Express содержится в плагинах.
Сторонние модули:
- Модуль node-msgpack - API для сериализации и де- сериализации объектов. json.
- Модуль node_pcap - биндинг для библиотеки libpcap, которую использует tcpdump Linux примеры использования и wireshark для захвата пакетов.
- Модуль node-ncurses - биндинг для ncurses
- Модуль always - демон always отслеживает событие изменения в разрабатываемом файле и автоматически перезапускает ваш проект. Можно применять не только с Node.js.
- Модуль js-yaml - парсер формата Что такое YAML (формат для файлов конфигурации)
- Модуль everyauth - Аутентификация и Авторизация пользователя например при помощи пароля, Twitter, Github и др.
Шаблонизаторы.
- Шаблонизатор Mu. Шаблонизаторы в Node: Mu.
- Шаблонизатор Jade движок шаблонов
- Шаблонизатор Nerve
Модули для работы с Движок БД MySQL.
- Модуль node-mysql - взаимодействие с Движок БД MySQL сервером.
Модули для работы с Использование и настройка PostgreSQL.
- node-postgres - обертка над библиотекой libpq.
- connect-pg
- Postgres-js драйвер - JavaScript- драйвер.
Модули для интернационализации(i18n Интернационализация) и локализации(L10n Локализация программного обеспечения).
- node-gettext - использует файл .MO библиотеки gettext локализация программного обеспечения.
Использование node.js
Node.js не использует отдельные потоки - все задачи выполняются в одном потоке. Node.js запуская цикл событий, в котором обрабатываются все задачи. Если будет использована блокирующая функция (какой-нибудь аналог функции sleep) - остановится выполнение всех задач, пока не выполнится блокирующая функция. Потому для устранения ожидания выполнения "долгих" функций используются функции обратного вызова. Функция обратного вызова запускается после выполнения "долгой" функции, а в это время цикл событий продолжает обрабатывать остальной код программы.
Вывод в реал-тайме логов iptables
- Вывод в реал-тайме логов Руководство по iptables: Настройка и оптимизация фаервола Linux.
# nano iptables_log.js var sys = require('util'), net = require('net'), spawn = require('child_process').spawn, http = require("http"); sys.puts('\nMy process PID: ' + process.pid + '\n'); var tail = spawn('tail', ['-f', '/var/log/ulog/syslogemu.log']); // указываем log файл sys.puts("Start tail -F syslogemu.log"); tail.stdout.addListener("data", function (data) { sys.puts(data); // дублируем себе на консоль }); http.createServer(function(request, response) { response.writeHead(200, {'Content-Type': 'text/plain'}); tail.stdout.addListener("data", function (data) { response.write(data); }); }).listen(1277, "127.0.0.1");
Функция spawn() создает дочерний процесс утилиты tail, процесс запускается только один раз во время старта сервера. Команда tail будет выводить новые данные из лог файла и транслировать вывод на веб-страницу каждому подключившемуся клиенту. Request - это поток, доступный для чтения, который содержит данные каждого http-запроса (например, подтверждение формы или загрузка файла). Response - это поток, доступный для записи, который используется для отправки данных обратно клиенту.
- Запуск скрипта iptables_log.js.
# /opt/nodejs/node-v0.6.0/out/Release/node /scripts/iptables_log.js
В браузере набираем http://localhost:1277
HTTP GET запрос
Для обработки URL и получения данных get запроса используется модуль 'url'. Для примера разберем HTTP GET запрос вида:
http://localhost:1277/cmdpath?nameparam1=valueparam1
var util = require('util'), net = require('net'), spawn = require('child_process').spawn, http = require("http"), url = require('url'); util.puts("Start Node.js"); http.createServer(function(request, response){ util.puts("Start HTTP Server"); util.puts(request.url); var urlObj = url.parse(request.url, true); util.puts(urlObj.href); util.puts(urlObj.search); util.puts(urlObj.query.nameparam1); // получаем значение переменной nameparam1 util.puts(urlObj.pathname); }).listen(1277, "127.0.0.1");
HTTP POST кросс-доменный запрос
Node.js обрабатывает Метод HTTP POST запрос в неблокирующем режиме. POST запрос неограничен по размеру. Если передаваемых данных в POST запросе много - это может привести к блокирующей операции. Для избежания блокировки Node.js обслуживает POST- данные небольшими порциями и вызывает callback- функции только при определённых событиях:
- событие data наступает, когда приходит новая порция POST-данных
- событие end наступает, когда все части данных были получены.
Для получения параметров POST запроса можно использовать модуль querystring.
var util = require('util'), net = require('net'), spawn = require('child_process').spawn, http = require("http"), url = require('url'); var querystring = require("querystring"); http.createServer(function(request, response){ util.puts("Start HTTP Server"); //обработка POST запроса var postData = null; request.addListener("data", function(postDataChunk) { // собираем в переменную postData весь POST запрос postData += postDataChunk; console.log(postData); }); request.addListener("end", function() { response.writeHead(200, { 'Content-Type': 'text/plain' }); response.write("You've sent: " + querystring.parse(postData)["job"]+"\n"); response.write("You've sent: " + querystring.parse(postData)["indomain"]+"\n"); response.write("postData: " + postData); console.log(querystring.parse(postData)); }); }).listen(1277, "127.0.0.1");
- Access-Control-Allow-Origin
В случае если ваша форма открытая в Apache отсылается Node.js, например так
var xhr = new XMLHttpRequest(); xhr.open('POST', 'http://localhost:1277/', false);
то вы будите заблокированы браузером c ошибкой Origin http://YouDomen is not allowed by Access-Control-Allow-Origin. Для устранения вы должны в node.js разрешить XSS (кросс-доменные, межсайтовые запросы). В примере ниже строка 'Access-Control-Allow-Origin' : '*' открывает подобные запросы для всех. Для безопасности нужно указать конкретный домен.
var body = 'hello world'; response.writeHead(200, { 'Content-Length': body.length, 'Content-Type': 'text/plain', 'Access-Control-Allow-Origin' : '*' });
Т.е. кросс-доменный запрос отсылается точно так же, как и обычный XMLHttpRequest, но браузер посылает на сервер дополнительный заголовок Origin. Сервер в ответе указывает заголовком Access-Control-Allow-Origin, для каких доменов доступны данные.
Прокси для node.js
Рекомендации по выбору прокси для node.js
Выбор прокси для использования с Node.js зависит от конкретных задач и требований к производительности, безопасности и анонимности. HTTP/HTTPS прокси легко интегрируются с большинством библиотек и фреймворков Node.js, таких как Axios или request. SOCKS5 прокси поддерживают высокую анонимность и безопасность, подходят для более сложных задач, таких как торренты или обход строгих блокировок. Примеры подходящих прокси-сервисов для Node.js вы можете найти в нашем обзоре Гид по выбору прокси-сервера ТОП Лучших Прокси Провайдеров.
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!
7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах