Всем привет! Первая тема этой статьи: передача параметров, скрипт для 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 blog.soshace.com


