Получение данных из командной строки

Передать данные в программу можно в командной строке после названия запускаемого файла. Получить эти данные в программе позволяет свойство argv из модуля process. Подключить модуль можно так:

const process = require('process');

Свойство argv содержит массив строк. Массив — это нумерованный набор элементов, расположенных в памяти последовательно друг за другом. Позиция элемента внутри массива задается с помощью индекса. Нумерация элементов массива начинается с 0, а не с 1. Получить количество элементов внутри массива позволяет свойство length. Давайте выведем содержимое массива и количество элементов в окно консоли:

const process = require('process');
console.log(process.argv);
console.log(process.argv.length);

После запуска программы получим примерно следующий результат:

C:\book\p1>node index.js
[ 'C:\\nodejs\\node12\\node.exe', 'C:\\book\\p1\\index.js' ]
2

Итак, по умолчанию массив содержит два элемента:

  • первый элемент (имеет индекс 0) — это путь к программе node.exe. Получить этот путь позволяют также свойства argv0 и execPath из модуля process:
console.log(process.argv0);
console.log(process.argv[0]);
console.log(process.execPath);

Значение свойства argv0 зависит от способа запуска в командной строке (содержит исходное значение argv[0]), тогда как свойство execPath всегда содержит абсолютный путь к программе node.exe:

C:\book\p1>node index.js
node
C:\nodejs\node12\node.exe
C:\nodejs\node12\node.exe
 
C:\book\p1>node.exe index.js
node.exe
C:\nodejs\node12\node.exe
C:\nodejs\node12\node.exe
 
C:\book\p1>C:\nodejs\node12\node.exe index.js
C:\nodejs\node12\node.exe
C:\nodejs\node12\node.exe
C:\nodejs\node12\node.exe
  • второй элемент (имеет индекс 1) — это путь к запускаемому скрипту:
console.log(process.argv[1]); // C:\book\p1\index.js

Теперь рассмотрим получение данных из командной строки (листинг 2.3).

Листинг 2.3. Получение данных из командной строки

const process = require('process');

const count = process.argv.length;
console.log('Количество элементов:', count);
for (let i = 0; i < count; i++) {
   console.log(process.argv[i]);
}

В листинге 2.3 использован цикл for, который позволяет изменить порядок выполнения инструкций. Обычно программа выполняется слева направо и сверху вниз. Инструкция за инструкцией. Цикл for меняет эту последовательность выполнения. Инструкции, расположенные внутри блока (ограниченного фигурными скобками), выполняются несколько раз. Количество повторений зависит от выражений внутри круглых скобок. Этих выражений три, и разделены они точками с запятой. Первое выражение объявляет переменную i и присваивает ей значение 0. Второе выражение является условием продолжения повторений. Пока значение переменной i меньше значения count (количества элементов массива), инструкции внутри блока будут повторяться. Это условие проверяется на каждой итерации цикла. Третье выражение на каждой итерации цикла прибавляет значение 1 к текущему значению переменной i. Доступ к элементу массива осуществляется с помощью текущего индекса, указанного внутри квадратных скобок. Благодаря циклу мы можем получить любое количество данных, переданных в командной строке.

Для запуска программы вводим команду:

C:\book\p1>node index.js -param1 -param2

В этой команде мы передаем программе некоторые данные (-param1 -param2). Результат выполнения программы будет выглядеть так:

Количество элементов: 4
C:\nodejs\node12\node.exe
C:\book\p1\index.js
-param1
-param2

Если нужно передать значение, которое содержит пробел, то это значение следует указывать внутри кавычек:

C:\book\p1>node index.js x + y "x + y"
Количество элементов: 6
C:\nodejs\node12\node.exe
C:\book\p1\index.js
x
+
y
x + y

В первом случае мы получили каждый символ по отдельности, в во втором — все символы вместе, указав значение внутри кавычек.

Учебник по Node.js и JavaScript
Учебник по JavaScript (Node.js) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов