уроки node.js — HackerX https://hackerx.ru Блог о программировании, СУБД, сетях и алгоритмах. Уроки и статьи по разным языкам программирования Wed, 11 Jul 2018 07:15:23 +0000 ru-RU hourly 1 https://wordpress.org/?v=4.9.8 Глобальные объекты: Объекты global и process https://hackerx.ru/node-global-objects/ https://hackerx.ru/node-global-objects/#respond Fri, 20 Apr 2018 08:33:13 +0000 https://hackerx.ru/?p=960 Два важнейших объекта в Node — global и process . Объект global немного похож на глобальный объект в браузере, хотя между ними существуют очень серьезные различия. Объект process , напротив, существует только в Node. Объект global В браузере переменная, объявленная на верхнем уровне, объявляется глобально. В Node дело обстоит иначе. Переменная, объявленная в модуле или […]

The post Глобальные объекты: Объекты global и process appeared first on HackerX.

]]>
Два важнейших объекта в Node — global и process . Объект global немного похож на глобальный объект в браузере, хотя между ними существуют очень серьезные различия. Объект process , напротив, существует только в Node.

Объект global

В браузере переменная, объявленная на верхнем уровне, объявляется глобально. В Node дело обстоит иначе. Переменная, объявленная в модуле или приложении Node, не обладает глобальной доступностью; она ограничивается модулем или приложением. Таким образом, можно объявить «глобальную» переменную с именем str в модуле и в приложении, использующем этот модуль, и никакого конфликта не будет.

Для демонстрации создадим простую функцию, которая прибавляет число к базовому значению и возвращает результат (название файла — add2.js). Функция будет создана как библиотека JavaScript для использования в веб странице, а также как модуль для использования в приложении Node. Код объявляет переменную base, присваивает ей значение 2, после чего прибавляет переданное число:

var base = 2;
function addtwo(input) {
  return parseInt(input) + base;
}

Затем создадим очень простой модуль (название файла — addtwo.js), который делает то же самое, но с использованием синтаксиса модуля Node.

var base = 2;
exports.addtwo = function(input) {
  return parseInt(input) + base;
};

А теперь посмотрим, чем различается концепция глобальности в двух разных средах. Файл add2.js используется в веб-странице, которая также объявляет переменную base:

<!DOCTYPE html>
<html>
 <head>
  <script src="add2.js"></script>
  <script>
   var base = 10;
   console.log(addtwo(10));
  </script>
 </head>
 <body>
 </body>
</html>

При обращении к веб-странице в браузере на консоли браузера выводится значение 20 (вместо ожидаемого 12). Дело в том, что все переменные, объявленные за пределами функции в JavaScript, добавляются в один глобальный объект. Объявляя новую переменную с именем base в веб странице, мы переопределяем значение во включенном файле сценария.

Теперь используем модуль addtwo в приложении Node:

var addtwo = require('./addtwo').addtwo;
var base = 10;
console.log(addtwo(base));

В приложении Node результат равен 12. Объявление новой переменной басе в приложении Node никак не повлияло на значение base в модуле, потому что они существуют в разных глобальных пространствах имен.

Устранение общего пространства имен — безусловное усовершенствование, но оно не универсально. Объект global во всех средах предоставляет доступ к глобально доступным объектам и функциям Node , включая объект процесс (см. далее). Чтобы убедиться в этом, просто добавьте следующую команду в файл и запустите приложение. Команда выводит все глобально доступные объекты и функции:

console.log(global);



Объект process

Объект process принадлежит к числу важнейших компонентов среды Node, так как он предоставляет информацию о среде выполнения. Кроме того, через объект process выполняется стандартный ввод/вывод, вы можете корректно завершить приложение Node и даже выдать сигнал при завершении итерации в цикле событий Node.

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

Объект process предоставляет доступ к информации как о среде Node, так и о среде выполнения программы. Для получения информации мы воспользуемся параметром командной строки -p , который выполняет сценарий и возвращает полученный результат. Например, для проверки свойства process. versions введите следующую команду:

$ node -p "process.versions"

{ http_parser: ‘2.5.0’,
node: ‘4.2.1’,
v8: ‘4.5.103.35’,
uv: ‘1.7.5’,
zlib: ‘1.2.8’,
ares: ‘1.10.1-DEV’,
icu: ‘56.1’,
modules: ’46’,
openssl: ‘1.0.2d’ }

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

Свойство process.env предоставляет богатую информацию о том, что Нодье знает о вашей среде разработки:

$ node -p "process.env"

Особенно интересно проанализировать различия между архитектурами (например, Linux и Windows).

Чтобы просмотреть содержимое process.release, введите следующую команду:

$ node -p "process.release"

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

$ node -p «process.release.lts»
‘Argon’

Однако при обращении к тому же значению в текущей версии (например, v6) будет получен другой результат:

$ node -p «process.release.lts»
undefined

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

Между версиями Node в любом случае должны остаться неизменными основные объекты и функции, важные для работы приложений. В их числе стандартный ввод/вывод и возможность корректного завершения приложения Node.

Стандартные потоки представляют собой заранее определенные каналы передачи данных между приложением и средой: стандартный ввод ( stdin ), стандартный вывод ( stdout ) и стандартный поток ошибок ( stderr ). В приложении Node эти каналы обеспечивают взаимодействие между приложением Нодье и терминалом, своего рода механизм прямого «общения» с приложением.

Node поддерживает каналы с тремя функциями process:

  • process.stdin : поток с поддержкой чтения для stdin;
  • process.stdout : поток с поддержкой записи для stdout;
  • process.stderr : поток с поддержкой записи для stderr.

Вы не можете закрывать эти потоки в своем приложении. Поддерживается только чтение данных из канала stdin и запись в каналы stdout и stderr.

Функции ввода/вывода process наследуют от EventEmitter, это означает, что они могут генерировать события, а вы можете перехватывать эти события и обрабатывать любые данные. Чтобы обработать входные данные с использованием process.stdin , прежде всего необходимо назначить кодировку потока. Если этого не сделать, вы получите результаты в виде буфера, а не в виде строки:

process.stdin.setEncoding('utf8');

Затем начинается прослушивание события readable , которое сообщает о поступлении блока данных, готового к чтению. Затем функция process.stdin. read() используется для чтения данных, и если данные отличны от null, они копируются в process.stdout при помощи функции process.stdout.write():

process.stdin.on('readable', function() {
  var input = process.stdin.read();
  if (input !== null) {
    // Эхо-вывод текста
    process.stdout.write(input);
  }
});

В принципе можно пропустить назначение кодировки и получить те же результаты; программа будет читать буфер и выводить буфер, но для пользователя приложения все выглядит так, словно вы работаете с текстом (строка). На самом деле это не так. Следующая функция process , которую мы рассмотрим, демонстрирует эти различия.

Мы раньше создали очень простой веб-сервер, который прослушивал запрос и выводил сообщение. Чтобы завершить программу, вам придется либо уничтожить процесс с использованием сигнала, либо нажать клавиши Ctrl+C. Также возможен другой вариант: завершить приложение из кода самого приложения при помощи process.exit() . Вы даже можете передать информацию о том, успешно ли завершилось приложение или произошла ошибка.

Мы изменим тестовое приложение ввода/вывода так, чтобы оно «прослушивало» строку выхода и при ее обнаружении программа завершалась.

process.stdin.setEncoding('utf8');

process.stdin.on('readable', function() {
  var input = process.stdin.read();
  if (input !== null) {
    // Эхо-вывод текста
    process.stdout.write(input);
    var command = input.trim();
    if (command == 'exit')
      process.exit(0);
  }
});

Если запустить это приложение, любая введенная строка будет немедленно повторяться в выводе. А если ввести команду exit , то приложение завершается, не требуя нажатия Ctrl+C.

Если убрать вызов функции process.stdin.setEncoding() в начале кода, произойдет ошибка. Дело в том, что буферы не поддерживают функцию trim(). Можно преобразовать буфер в строку, а затем выполнить trim:

var command = input.toString().trim();

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

Запись в объект process.stderr выполняется при возникновении ошибки. Почему именно этот объект, а не process.stdout ? По той же причине, по которой был создан канал stderr: чтобы отделить ожидаемый вывод от возникающих проблем. В некоторых системах вывод stderr даже может обрабатываться отдельно от stdout (например, сообщения stdout сохраняются в журнале, а вывод stderr выводится на консоль).

The post Глобальные объекты: Объекты global и process appeared first on HackerX.

]]>
https://hackerx.ru/node-global-objects/feed/ 0
Node.js: Паттерны / шаблоны проектирования https://hackerx.ru/node-js-shabloni-proektirovanie/ https://hackerx.ru/node-js-shabloni-proektirovanie/#respond Fri, 18 Aug 2017 13:43:46 +0000 https://hackerx.ru/?p=868 Освоение асинхронной природы платформы Node.js, вообще говоря, не тривиальная задача, особенно для тех, кто переходит на нее с таких языков, как PHP, где обычно не приходится иметь дело с асинхронным кодом. В синхронном программировании используется привычная концепция, представляющая код как ряд последовательных вычислений, направленных на решение конкретной задачи. Любая операция является блокирующей, поскольку только после […]

The post Node.js: Паттерны / шаблоны проектирования appeared first on HackerX.

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

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

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

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



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

В следующей статье начнём знакомиться с двумя важных шаблонов асинхронной обработки: Callback (Обратный вызов) и Event Emitter (Генератор событий).

The post Node.js: Паттерны / шаблоны проектирования appeared first on HackerX.

]]>
https://hackerx.ru/node-js-shabloni-proektirovanie/feed/ 0
Node.js — Процессы. Свойства и методы объекта Process https://hackerx.ru/node-js-process/ https://hackerx.ru/node-js-process/#respond Mon, 14 Aug 2017 14:18:15 +0000 https://hackerx.ru/?p=792 Любое приложение созданное на Node.js — это экземпляр объекта Process, который наследует все свойства и методы этого объекта. С помощью этих свойств и методов мы можем получить информацию о приложении и контексте его исполнения. Ниже представлен пример работы некоторых свойств, назначение которых очевидно из названий. Для использование данного примера, нужно создать .js файл, вводить код примера и запустить файл с терминала (командная строка). […]

The post Node.js — Процессы. Свойства и методы объекта Process appeared first on HackerX.

]]>
Любое приложение созданное на Node.js — это экземпляр объекта Process, который наследует все свойства и методы этого объекта. С помощью этих свойств и методов мы можем получить информацию о приложении и контексте его исполнения. Ниже представлен пример работы некоторых свойств, назначение которых очевидно из названий.

Для использование данного примера, нужно создать .js файл, вводить код примера и запустить файл с терминала (командная строка).

console.log(process.execPath);
console.log(process.version);
console.log(process.platform);
console.log(process.arch);
console.log(process.title);
console.log(process.pid);

Если используете операционную систему Windows, то результат может быть примерно такой:

C:\Program Files\nodejs\node.exe
v8.1.4
win32
x64
cmd — node test.js
3712

Еще две важные и часто используемые свойства объекта Process — это process.moduleLoadList и process.argv. С помощью свойство moduleLoadList мы можем получить информацию о загруженных модулях, а с помощью argv мы можем получить весь список команд из командной строки (терминал / cmd).

process.argv возвращает массив аргументов командной строки. Давайте рассмотрим это на примере. Нам нужно создать .js файл с таким содержанием:

console.log( process.argv );

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



Без дополнительных параметров:

node test.js

Результат:

[ ‘C:\\Program Files\\nodejs\\node.exe’,
‘C:\\Users\\Voskan\\Desktop\\primeri\\test.js’ ]

Результатом будет массив параметров командной строки. Всегда первый элемент массива — это имя / адрес исполняемого правления, то есть адрес интерпретатора Node.js, второй параметр — это файл который исполняется.

А сейчас посмотрим пример с доп. параметрами:

node test.js foo bar kuku hello

Результат:

[ ‘C:\\Program Files\\nodejs\\node.exe’,
‘C:\\Users\\Voskan\\Desktop\\primeri\\test.js’,
‘foo’,
‘bar’,
‘kuku’,
‘hello’ ]

Мы видим, что свойство process.argv возвращает все команды / параметры терминала / консоли в виде массива данных.

Следующая команда / метод — это process.exit(), с помощью которого можно завершить / закрыть процесс. Метод в качестве параметра принимает число / статус код. По умолчанию это 0, который означает, что процесс завершен успешно. Чтобы завершить / выйти с ошибкой, нужно передать 1 — process.exit(1).

Код выхода определяется с помощью событие exit:

process.on("exit", (code) => {
  console.log("Процесс завершен с кодом: " + code);
});

Еще один полезный метод — это process.memoryUsage(), который возвращает информацию о потребление памяти процессом Node в байтах. Метод возвращает информацию в виде объекта.

Пример использование метода process.memoryUsage():

console.log( process.memoryUsage() );

let arr = [];

for(let i = 0; i <= 50000; i++){
    arr[i] = "String " + i;
}

console.log( process.memoryUsage() );

Результат:

{ rss: 21565440,
heapTotal: 6291456,
heapUsed: 4411624,
external: 8252 }

{ rss: 27615232,
heapTotal: 16777216,
heapUsed: 8688976,
external: 8252 }

heapTotal и heapUsed характеризуют потребление памяти JavaScript движка V8.

The post Node.js — Процессы. Свойства и методы объекта Process appeared first on HackerX.

]]>
https://hackerx.ru/node-js-process/feed/ 0
Node.js — обработка событий. Объект EventEmitter https://hackerx.ru/nodejs-events-object-eventemitter/ https://hackerx.ru/nodejs-events-object-eventemitter/#respond Fri, 03 Mar 2017 08:18:33 +0000 https://hackerx.ru/?p=413 Обработка событий (events) — это основа работы с Node.js. Практически все объекты в Node.js генерируют событий. В Node.js для работы с событиями есть специальный модуль events. Мы можем назначить объекту обработчик события с помощью метода addListener(event, callback). Метод принимает два аргумента — имя и обработчик события. Имя события — это строка, обычно в camelCase-стиле, например, connection, message, messageBegin. А второй параметър (обработчик) — […]

The post Node.js — обработка событий. Объект EventEmitter appeared first on HackerX.

]]>
Обработка событий (events) — это основа работы с Node.js. Практически все объекты в Node.js генерируют событий. В Node.js для работы с событиями есть специальный модуль events.

Мы можем назначить объекту обработчик события с помощью метода addListener(event, callback). Метод принимает два аргумента — имя и обработчик события. Имя события — это строка, обычно в camelCase-стиле, например, connection, message, messageBegin. А второй параметър (обработчик) — ето callback функция (функция обратного вызова). Но есть и короткая версия этого метода, это для тех разработчиков, которые привыкли к удобств jQuery. Для метода addListener() существует синоним — метод on().

Пример обработки событий с помощью метода on:

server.on("connection", () => {
    console.log("connected!");
});

У метода on() есть очень полезная модификация — once(). С помощью метода once() мы можем назначить однократный обработчик события.

server.once("connection", () => {
    console.log("first connection!");
});

Этот код (события) сработает только при первом соединение с сервером.

В Node.js мы можем с одним объектом связать сколько угодно обработчиков, но по умолчанию их количество ограничено 10. Это сделано для того, чтобы предотвратить утечки памяти. Но мы имеем возможность изменить максимальное количество с помощью метода setMaxListeners(n), где n — это требуемое максимальное допустимое количество обработчиков.

Так же мы можем посмотреть все обработчики объекта, которые связаны с конкретными событиями. Это можно сделать с помощью метода listeners, который возвращает массив обработчиков.

const http = require("http");

const server = http.createServer((req, res) => {

}).listen(8080);

function serverClose(){
    server.close();
}

server.on("connection", () => {
    console.log("Connected!");
});

server.on("connection", serverClose);

console.log( server.listeners("connection") );

Результат:

[ [Function: connectionListener],
[Function],
[Function: serverClose] ]

Мы ожидали, что в консоле мы увидим два обработчиков, а мы видим три, откуда взялся первый обработчик? Всё просто, connectionListener автоматически создается методом http.createServer(), это родной обработчик объекта.

Мы можем удалить обработчик с помощью метода removeListener(event, callback).

server.removeListener("connection", () => {
    console.log("Удален!");
});

Метод emit(event, [args]) — этот метод позволяет назначенным обработчикам срабатывать, как если бы связанные событие случилось. То есть, мы можем создать обработчик события а потом с помощью этого метода вызвать обработчик.

server.on("myEventName", (userName) => {
    console.log(`Hello, ${userName}`);
});

server.emit("myEventName", "John");

Метод emit() кроме имени обработчика может принимать необязательные параметры — список аргументов обработчика.

В Node.js мы можем создать собственные событие и обработать. Это можно сделать с помощью конструктора / класса EventEmitter.

Объект EventEmitter

EventEmitter — это основной объект, который реализует работу обработчиков событий в Node.js. Любой объект, который является источником событий, наследует от класса EventEmitter. Так же все методы, о которых мы говорили, принадлежат этому классу. С помощью этого объекта мы можем создать собственной событие.

const EventEmitter = require("events").EventEmitter;

const myEventObject = new EventEmitter();

myEventObject.on("eventName", (userName) => {
    console.log(userName);
});

myEventObject.emit("eventName", "John");

 

The post Node.js — обработка событий. Объект EventEmitter appeared first on HackerX.

]]>
https://hackerx.ru/nodejs-events-object-eventemitter/feed/ 0
MySQL и Node.js — Подключение к базе данных https://hackerx.ru/mysql-node-js-connect-to-database/ https://hackerx.ru/mysql-node-js-connect-to-database/#respond Mon, 28 Nov 2016 19:31:46 +0000 https://hackerx.ru/?p=323 Существует несколько модулей для работы с MySQL в Node.js. Но самый популярный модуль — это node-mysql. Данный модуль появилось одним из первых, и с его помощью написан довольно много Node.js / MySQL приложений. Давайте приступим к делу. Чтобы начать использовать MySQL в проекте, сначало нужно установить модуль mysql. npm install mysql После успешной установки нам нужно произвести подключение к базе […]

The post MySQL и Node.js — Подключение к базе данных appeared first on HackerX.

]]>
Существует несколько модулей для работы с MySQL в Node.js. Но самый популярный модуль — это node-mysql. Данный модуль появилось одним из первых, и с его помощью написан довольно много Node.js / MySQL приложений.

Давайте приступим к делу. Чтобы начать использовать MySQL в проекте, сначало нужно установить модуль mysql.

npm install mysql

После успешной установки нам нужно произвести подключение к базе данных.

const mysql = require("mysql");

const connection = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "my_password"
});

connection.connect();

Это пока еще не все, мы открыли соединение с сервером MySQL и не закрыли. Если мы сейчас запустим даный сценарий, он не завершается сам. Для закрытие соединение у объекта connection есть метод end — connection.end();

Метод принимает callback функцию, и он гарантирует, что все активные запросы успеют завершится до закрытие соединение.

connection.end(function(err){
    if(err) return console.log(err);

    console.log("Disconnect");
});

Метод createConnection может принимать и другие (необязательные) параметры. Вот некоторые из них:

  • charset — Это кодировка, по умолчанию стоит UTF8_GENERAL_CI,
  • timezone — Временная зона, по умолчанию локальная времия — local,
  • flags — Список флагов соединения,
  • multipleStatements — По умолчанию отключена для защиты от SQL-инъекций. Разрешает многократное использование SQL-инструкции за один запрос.

А теперь давайте сделаем запрос к базе данных. Для выполнение запросов к базе есть метод query. Он первым параметром принимает SQL запрос, а вторым callback функцию.

connection.query("SELECT * FROM users", function(err, rows, fields){
    if(err) return console.log(err);

    // Действие с результатом
});

Метод query нужно вызвать до закрытие соединение.

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

The post MySQL и Node.js — Подключение к базе данных appeared first on HackerX.

]]>
https://hackerx.ru/mysql-node-js-connect-to-database/feed/ 0
Создание и запуск HTTP-сервера на Node.js. «Hello, World!» на Node.js https://hackerx.ru/node-js-for-beginners-create-a-http-server/ https://hackerx.ru/node-js-for-beginners-create-a-http-server/#comments Thu, 14 Jan 2016 14:25:00 +0000 https://hackerx.ru/?p=179 В предыдущем уроке мы установили Node.js на Ubuntu. Когда Node.js установлена, самое время написать первое приложение и тестировать систему. В этом уроке мы создадим простой веб-сервер (HTTP-сервер) на Node.js и подробно рассмотрим каждую строку кода. Наш веб-сервер будет вывести приветственное сообщение. Итак, давайте создадим наш первый файл (start.js) с таким содержанием: const http = require('http'); http.createServer( function(requset, response){ response.writeHead(200, {'Content-Type': 'text/html'}); […]

The post Создание и запуск HTTP-сервера на Node.js. «Hello, World!» на Node.js appeared first on HackerX.

]]>
В предыдущем уроке мы установили Node.js на Ubuntu. Когда Node.js установлена, самое время написать первое приложение и тестировать систему. В этом уроке мы создадим простой веб-сервер (HTTP-сервер) на Node.js и подробно рассмотрим каждую строку кода. Наш веб-сервер будет вывести приветственное сообщение.

Итак, давайте создадим наш первый файл (start.js) с таким содержанием:

const http = require('http');

http.createServer( function(requset, response){
    response.writeHead(200, {'Content-Type': 'text/html'});
    response.end('Hello, World!');
}).listen(8080);

console.log('Server running on 8080');

Приложения нужно запустить с терминала если у Вас операционная система Unix/Linux или с командной строки (cmd) если у Вас Windows. Нужно открыть терминал, перейти ту папку, где Вы сохранили файл start.js и набрать в терминале следующую команду:

node start.js

После этого программа будет запущена и в терминале будет выведена следующая строка: Server running on 8080.

Создание и запуск HTTP-сервера на Node.js

Теперь наш сервер запущен и мы можем обратиться к ней с помощью любого браузера. Сейчас нам нужно открыть браузер и перейти по следующему адресу — http://localhost:8080/. После этого в браузере мы увидим страницу с текстом Hello, World!.

Запуск веб-сервера на Node.js

Чтобы прекратить работу веб-сервера, нужно в терминале нажать на комбинацию клавиш Ctrl+C. Если Вы внесли в коде изменение, то нужно остановить и запустить http-сервер, чтобы изменение учитывались.

HTTP-сервер с нуля — объяснение

А теперь давайте подробно рассмотрим ваш код начиная с первой строки.

Первая строка — это директива ‘use strict’. Node.js поддерживает современный стандарт ECMAScript 6 (ES6 или JavaScript 2015) и мы уже в коде использовали новые возможности ECMAScript 6. Также мы в дальнейшем будем использовать новые возможности нового стандарта. Директива ‘use strict’ переводит код в режим полного соответствия современному стандарту. Без этого наш код не будет работать.

Следующая строка кода выглядит так:

const http = require('http');

Здесь мы загружаем HTTP модуль и присваиваем его http переменной. С помощью HTTP модуля мы можем работать с HTTP протоколом — отправить и принять HTTP запросы.



Практически весь функционал Node.js находится в отдельных модулях (библиотеки). Есть модули, которые уже встроены в ядро Node.js (например, модуль fs — для работы с файловой системой, модуль http, tcp и другие) и есть модули которые можно отдельно установить (например, модуль mongodb — драйвер для работы с базой данных MongoDB). Также мы в дальнейшем создаем свои модули.

Функция require() загружает модули. С помощью функции require() можно загружать любой модуль и мы его в дальнейшем неоднократно будем использовать.

С помощью конструкции const мы объявляем переменную (константа). Конструкция const появилось в новом версии ECMAScript-а — ECMAScript 6.

Следующая строка кода выглядит так:

http.createServer( function(requset, response){ ...

У объекта http есть метод createServer(). С помощью этого метода создается новый сервер. createServer() метод в качестве аргумента получает безымянную функцию. Данная функция является функцией requestListener (приемником запроса) и он принимает два параметра:

  • Request (http.ServerRequest) — запрос от клиента к серверу (серверный запрос).
  • Response (http.ServerResponse) — серверный ответ.

Следующая строка находится в безымянной функции:

response.writeHead(200, {'Content-Type': 'text/html'});

У объекта response есть несколько методов и один из них это метод writeHead(). С помощью этого метода клиенту можно отправлять заголовки ответа (HTTP заголовки) и статус код. В нашем случае мы отправляем статус код 200 и тип контента — HTML. Можно отправлять другие заголовочные информации клиенту кроме типа контента. Например длину контента — content-length.

response.writeHead(200, {
    'Content-Type': 'text/html',
    'Content-Length': 90
});

Следующая строка кода — это еще один метод объекта response.

response.end('Hello, World!');

Метод end() посылает сигнал о завершении передачи данных, то есть о том, что все заголовки и тело ответа были отправлены. Вам нужно всегда использовать метод end() при отправке данных клиенту. Этот метод имеет две необязательные параметры:

  • Первый параметр метода это данные (текст или буфер).
  • Второй параметр — это кодировка текста, если первый параметр был текстом

В нашем случае мы отправляем сигнал о том, что все данные переданы, но кроме сигнала отправляем текст, который клиент принимает как отправляется клиенту как тело HTTP сообщения (body).

Мы так же текст можем отправлять другим методом. У объекта response есть метод write(), с помощью которого можно отправлять любой текст клиенту.

response.write('<h1>Hello, World!</h1>');

После метода createServer() идет еще один метод listen(), который прослушивает входящие подключения к заданному порту.

... }).listen(8080);

В нашем случае наш сервер слушает порт 8080. Метод listen() является асинхронным методом. При обращение к серверу приложение не блокирует выполнение кода в ожидание подключение к порту. Обрабатывается остальная часть кода, который идет за методом listen(). А после подключения к порту автоматически активируется функция обратного вызова.

А в последнем сроке кода мы просто выводим текст в консоль.

console.log('Server running on 8080');

 

The post Создание и запуск HTTP-сервера на Node.js. «Hello, World!» на Node.js appeared first on HackerX.

]]>
https://hackerx.ru/node-js-for-beginners-create-a-http-server/feed/ 3
Установка Node.js на Linux Ubuntu 16.04 и 14.04 https://hackerx.ru/ustanovka-node-js-na-linux-ubuntu-14-04/ https://hackerx.ru/ustanovka-node-js-na-linux-ubuntu-14-04/#respond Wed, 06 Jan 2016 14:08:31 +0000 https://hackerx.ru/?p=153 Из предыдущей статьи мы узнали что такое Node.js и где он используется. В этом статье я покажу как установить последнюю версию Node.js на последних версий Linux. Node.js на Ubuntu можно установить несколькими способами: Установка стабильной версии Node.js из стандартных репозиториев. Установка Node.js с помощью PPA (Personal Package Archive). Установка Node.js с помощью NVM (Node.js Version Manager). […]

The post Установка Node.js на Linux Ubuntu 16.04 и 14.04 appeared first on HackerX.

]]>
Из предыдущей статьи мы узнали что такое Node.js и где он используется. В этом статье я покажу как установить последнюю версию Node.js на последних версий Linux.

Node.js на Ubuntu можно установить несколькими способами:

  1. Установка стабильной версии Node.js из стандартных репозиториев.
  2. Установка Node.js с помощью PPA (Personal Package Archive).
  3. Установка Node.js с помощью NVM (Node.js Version Manager).

Установка Node.js из стандартных репозиториев

В стандартных репозиториях Ubuntu есть стабильная версия Node.js, но это не самая последняя версия (при написание этой статьи версия Node.js в репозиториях — 0.10.25). Из репозиториев Node.js и NPM устанавливаются отдельно. Для установки Node.js из стандартных репозиториев мы можем воспользоваться пакетным менеджером apt. Но для начала, давайте обновим индекс пакетов.

sudo apt-get update

А теперь можно установить дистрибутив из репозиториев.

sudo apt-get install nodejs

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

nodejs -v

или

nodejs --version

Очень часто Вы будете работать с NPM (пакетный менеджер Node.js). NPM из стандартных репозиториев можно установить с помощью следующей команды.

sudo apt-get install npm

После установки Вы можете узнать версию NPM с помощью следующей команды.

npm -v

Если Вам нужно работать с последней версии Node.js, то Вы можете воспользоваться альтернативными способами установки Node.js на Ubuntu — это установка с помощью PPA или NVM.

Установка Node.js с помощью PPA (Personal Package Archive)

PPA — это персональный архив пакетов. Он поддерживается компанией NodeSource, и там более новая версия, чем в официальных репозиториях Ubuntu. Для установки Node.js с помощью PPA нам нужно установить сам PPA. Это можно сделать с помощью этой команды.

curl -sL https://deb.nodesource.com/setup | sudo bash -

После этого PPA будет добавлен в конфигурации сервера а локальный кэш пакетов будет обновится автоматически. После установки PPA мы можем установить Node.js.

sudo apt-get install nodejs

Здесь уже не нужно отдельно установить NPM, этот пакет содержит и Node.js и NPM, и обе после установки будут доступны. Но для работы некоторых пакетов, например те, которые требуют сборку из исходников, нужно еще и установить пакет build-essentials. Для этого мы можем использовать следующую команду.

sudo apt-get install build-essential

Node.js и NPM установлены, можете тестировать. Но если и этот способ Вам не подходит, Вы хотите установить последнюю версию Node.js, переключаться с одной версии на другую, то я рекомендую установить Node.js с помощью NVM (Node.js Version Manager).


Установка Node.js с помощью NVM (Node.js Version Manager)

С помощью NVM (менеджер версий Node.js) Вы можете установить на Linux несколько версий Node.js, они будут изолированы друг от друга. Вы всегда можете переключиться с одной версии на другую.

Для работы с NVM нам сначало нужно установить пакеты из репозиториев Ubuntu, с помощью которых можно будет собирать пакеты из исходников. NVM будет использовать эти пакеты для сборки нужных компонентов.

sudo apt-get update
sudo apt-get install build-essential libssl-dev

После этого нужно загрузить установочный скрипт NVM со страницы проекта Github. Номер версии скрипта может отличаться, на данный момент версия скрипта 0.33.11. Версию скрипта можно узнать отсюда. Для загрузки и установки скрипта можно использовать следующий код.

curl https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | sh

После этого скрипт будет загружен и запущен. Программа будет установлено в Вашу домашнюю директорию. Его можно найти по этому адресу ~/.nvm
Также в файле ~/.profile будут добавление некоторые строки — конфигурации.
Сейчас нам нужно получить доступ к функционалу NVM. Для этого можно использовать команду source или перелогинится. При использование команды source Вам не нужно перелогинится, Вы можете работать дальше не прерывая текущую сессию:

source ~/.profile

NJVM установлен и сейчас мы можем установить Node.js. Но до этого нам нужно узнать какие версии Node.js доступны для установки. Для этого введите в терминале следующую команду.

nvm ls-remote

После ввода команды мы увидим список доступных версий Node.js.Установка Node.js на Linux Ubuntu

Сейчас уже мы можем установить необходимую версию:

nvm install 8.11.1

После этого нам нужно переключить NVM на только что загруженную версию.

nvm use 8.11.1

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

nvm alias default 8.11.1

Данная версия будет автоматически выбираться при начале новой сессии. При установке Node.js с помощью NVM, так же будет установлено NPM автоматически.

Вы можете использовать эту команду, чтобы узнать какая версия Node.js установлен: node -v

Вы можете использовать эту команду, чтобы узнать какая версия NPM установлен: npm -v

 

The post Установка Node.js на Linux Ubuntu 16.04 и 14.04 appeared first on HackerX.

]]>
https://hackerx.ru/ustanovka-node-js-na-linux-ubuntu-14-04/feed/ 0