18Nov

24_s1

Всем привет! Первая тема этой статьи: передача параметров, скрипт для Node.js. Для этого мы создадим файл с простым кодом, добавьте его (server.js):

// node server.js port=3000

var http = require('http');

http.createServer(function(req, res) {

    res.end("The server is running!");
    
}).listen(3000);

и сделаем и сделаем так, что порт для запуска он будет брать из командной строки, запускать его будем так:

node server.js port=3000

и этот порт будет использоваться для listen.

Для этого можно  добавить этот параметр в конфигурацию запуска в вашем IDE (добавьте port=3000). Чтобы получить то, что передано в командной строке, подойдет замечательная переменная process.argv.

// node server.js port=3000

var http = require('http');

console.log(process.argv);

http.createServer(function(req, res) {

    res.end("The server is running!");

}).listen(3000);

Запускаем. Видим, что вывелись параметры. Обратите внимание, сначала идет сам node, потом файл, а потом уже порт. Отсюда легко увидеть, что простейшие способы получить значение параметра, это пробежаться по массиву и выдрать соответствующую строчку. Есть и более удобный путь, а именно,  поставить модуль, который называется optimist:

npm install optimist

Используем optimist вместо process.argv, и мы посмотрим, что из этого выйдет. Для этого мне понадобится изменить синтаксис, потому что optimist поддерживает либо вот такой синтаксис:

// node server.js —port=3000

либо вот такой:

// node server.jsport 3000

// node server.js port=3000

var http = require('http');

console.log(require('optimist').argv);

http.createServer(function(req, res) {

    res.end("The server is running!");

}).listen(3000);

Теперь получаю опции через argv. Запускаем. Как видим, все отлично. Осталось использовать здесь переменную и поменять порт в listen:

// node server.js port=3000

var http = require('http');

var opts = require('optimist').argv;

http.createServer(function(req, res) {

    res.end("The server is running!");

}).listen(opts.port);

Перезапускаем и смотрим, как наш сервер работает уже на новом порту.

http://localhost:3000/

Отлично работает!

Теперь сделаем следующий шаг. Здесь используется запуск node, но для разработки мы обычно используем другой модуль, например, supervisor, чтобы он автоматически перезапускал сервер. Соответственно, чтобы использовать supervisor и передать параметры, нужно запускать так:


supervisor -- server.js --port=3000

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

Итак, мы можем получить параметры командной строки, во-первых, из массива process.argv; во-вторых, модуль optimist, и в-третьих, можно получить настройки с переменных окружения. Как правило, большинство переменных окружения ставятся операционной системой, в частности, почти везде есть переменная окружения с именем HOME. Получить ее можем так:

// supervisor -- server.js --port=3000

console.log(process.env.HOME);

var http = require('http');

var opts = require('optimist').argv;

http.createServer(function(req, res) {

    res.end("The server is running!");

}).listen(opts.port);

Запускаем. И вот оно вывело домашнюю директорию текущего пользователя.

Можно использовать и свои переменные окружения. Например, во фреймворке Express, который мы будем рассматривать несколько позже, используется переменная окружение с названием NODE_ENV. В ней хранится информация о том, в каком режиме сейчас запуск. Например, NODE_ENV=development – режим разработки, или production – это режим уже боевого сервера. В коде мы можем проверить, если NODE_ENV = production, то подключить дополнительные оптимизации, а иначе, если NODE_ENV = development, то подключить дополнительный отладочный вывод.

// supervisor -- server.js --port=3000

console.log(process.env.HOME);

var http = require('http');

var opts = require('optimist').argv;

http.createServer(function(req, res) {

    if (process.env.NODE_ENV == 'production') {
        // optimization
    } else if (process.env.NODE_ENV == 'development') {
            // additional debugging output

        }
    
    res.end("The server is running!");

}).listen(opts.port);

Для того, чтобы задать переменные окружения, мы будем использовать один из нескольких способов. Первый: если запуск через IDE, то можно задать переменные окружения в ней же. Если же запуск происходит вне IDE, то указание переменных окружения делается по-разному, в зависимости от операционной системы. Например, для Windows это будет:

set NODE_ENV=production

Все дальнейшие команды, которые запущены в этом терминале, будут иметь значение  NODE_ENV=production. Под Unix системами, если оболочка Bash, то аналог будет вот такой:

export NODE_ENV=production

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

NODE_ENV=production supervisor -- server.js --port=3000

Итак, мы рассмотрели три варианта получения параметров процессов в Node.js:

  1. Из командной строки через process.argv.
  2. Из командной строки, но через модуль optimist, который умеет обрабатывать некоторые стандартные виды настроек.
  3. Получение параметров из переменных окружения, которые содержаться в process.env.

Код урока можно скачать здесь.

node-24_2

Материалы для статьи взяты из данного скринкаста

We are looking forward to meeting you on our website soshace.com

11. Уроки Node.js. Эхо-сервер.

Всем привет! На этом занятии мы создадим эхо-сервер, то есть, такой сервер, который при запросе на url /echo c параметром message выдает значение этого параметра:

// http://127.0.0.1:3000/echo?message=Hello -> Hello
На все другие запросы отвечает: Страница не найдена.

Начнем вот с такого шаблона:

4. Уроки Node.js. Структура Пакета NPM

Продолжаем наш разговор об NPM.Для того чтобы посмотреть на реальный package.json поставим модуль express. Введем в консоли:

npm i [email protected]

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

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

Leave a Reply