Всем привет! Первая тема этой статьи: передача параметров, скрипт для 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.js –port 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:
- Из командной строки через
process.argv
. - Из командной строки, но через модуль
optimist
, который умеет обрабатывать некоторые стандартные виды настроек. - Получение параметров из переменных окружения, которые содержаться в
process.env
.
Код урока можно скачать здесь.
Материалы для статьи взяты из данного скринкаста
We are looking forward to meeting you on our website soshace.com