Как написать и запустить вашу первую программу в Node.js

_Автор выбрал Open Internet / Free Speech Fund для получения пожертвования в рамках https://do.co/w4do-cta [Писать для DOnations] программа.

Вступление

Node.js - это популярная среда выполнения с открытым исходным кодом, которая может выполнять JavaScript за пределами браузера с помощью механизма V8 JavaScript, который является тем же механизмом, который используется для запуска JavaScript в браузере Google Chrome. Среда выполнения Node обычно используется для создания инструментов командной строки и веб-серверов.

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

Кроме того, благодаря поддержке асинхронного выполнения, Node.js отлично справляется с задачами с интенсивным вводом-выводом, что делает его таким подходящим для Интернета. Приложения реального времени, такие как потоковое видео, или приложения, которые непрерывно отправляют и получают данные, могут работать более эффективно при написании в Node.js.

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

Предпосылки

Для завершения этого урока вам понадобится:

Шаг 1 - Вывод на консоль

Чтобы написать программу «Hello, World!», Откройте текстовый редактор командной строки, такой как + nano +, и создайте новый файл:

nano hello.js

В открытом текстовом редакторе введите следующий код:

hello.js

console.log("Hello World");

Объект + console + в Node.js предоставляет простые методы для записи в + stdout +, + stderr + или в любой другой поток Node.js, который в большинстве случаев является командной строкой. Метод + log печатает в поток` + stdout`, так что вы можете увидеть его в своей консоли.

В контексте Node.js streams - это объекты, которые могут принимать данные, например, поток + stdout +, или объекты, которые могут выводить данные, например, сетевой сокет или файл. В случае потоков + stdout + и + stderr + любые отправленные им данные будут показаны в консоли. Одна из замечательных особенностей потоков заключается в том, что они легко перенаправляются, и в этом случае вы можете, например, перенаправить вывод вашей программы в файл.

Сохраните и выйдите из + nano +, нажав + CTRL + X +, когда будет предложено сохранить файл, нажмите + Y +. Теперь ваша программа готова к запуску.

Шаг 2 - Запуск программы

Чтобы запустить эту программу, используйте команду + node + следующим образом:

node hello.js

Программа + hello.js + выполнит и отобразит следующий вывод:

Output Hello World

Интерпретатор Node.js прочитал файл и выполнил + console.log (" Hello World "); +, вызвав метод + log + глобального объекта + console +. Строка " Hello World " была передана в качестве аргумента функции + log +.

Хотя кавычки необходимы в коде, чтобы указать, что текст является строкой, они не выводятся на экран.

Подтвердив, что программа работает, давайте сделаем ее более интерактивной.

Шаг 3 - Получение пользовательского ввода через аргументы командной строки

Каждый раз, когда вы запускаете программу Node.js «Hello, World!», Она выдает один и тот же результат. Чтобы сделать программу более динамичной, давайте получим ввод от пользователя и отобразим ее на экране.

Инструменты командной строки часто принимают различные аргументы, которые изменяют их поведение. Например, запуск + node + с аргументом + - version + выводит установленную версию вместо запуска интерпретатора. На этом шаге вы заставите свой код принимать ввод пользователя через аргументы командной строки.

Создайте новый файл + arguments.js + с помощью nano:

nano arguments.js

Введите следующий код:

arguments.js

console.log(process.argv);

Объект + process + является объектом global Node.js, который содержит функции и данные, связанные с текущим запущенным процессом Node.js. Свойство + argv + - это массив строк, содержащий все аргументы командной строки, заданные программе.

Сохраните и выйдите из + nano +, набрав + CTRL + X +, когда будет предложено сохранить файл, нажмите + Y +.

Теперь, когда вы запускаете эту программу, вы предоставляете аргумент командной строки, например:

node arguments.js hello world

Вывод выглядит следующим образом:

Output [ '/usr/bin/node',
 '/home//first-program/arguments.js',
 'hello',
 'world' ]

Первым аргументом в массиве + process.argv + всегда является местоположение двоичного файла Node.js, на котором выполняется программа. Второй аргумент - это всегда местоположение запускаемого файла. Остальные аргументы - это то, что вводил пользователь, в данном случае: + hello + и + world +.

Нас больше всего интересуют аргументы, введенные пользователем, а не те, которые по умолчанию предоставляет Node.js. Откройте файл + arguments.js для редактирования:

nano arguments.js

Измените + console.log (process.arg); + на следующее:

arguments.js

console.log(process.argv.);

Поскольку + argv + является массивом, вы можете использовать встроенный в JavaScript метод + slice +, который возвращает выбор элементов. Когда вы предоставляете функцию + slice + с + 2 + в качестве аргумента, вы получаете все элементы + argv +, которые идут after его второй элемент; то есть аргументы, введенные пользователем.

Перезапустите программу с командой + node + и теми же аргументами, что и в прошлый раз:

node arguments.js hello world

Теперь вывод выглядит так:

Output [ 'hello', 'world' ]

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

Шаг 4 - Доступ к переменным среды

Переменные среды - это данные значения ключа, хранящиеся вне программы и предоставляемые ОС. Как правило, они устанавливаются системой или пользователем и доступны всем запущенным процессам для целей конфигурации или состояния. Вы можете использовать Node + process для доступа к ним.

Используйте + nano + для создания нового файла + environment.js +:

nano environment.js

Добавьте следующий код:

environment.js

console.log(process.env);

Объект + env + хранит all переменные окружения, которые доступны, когда Node.js запускает программу.

Сохраните и выйдите, как прежде, и запустите файл + environment.js с помощью команды` + node n`.

node environment.js

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

Output{ SHELL: '/bin/bash',
 SESSION_MANAGER:
  'local/digitalocean:@/tmp/.ICE-unix/1003,unix/digitalocean:/tmp/.ICE-unix/1003',
 COLORTERM: 'truecolor',
 SSH_AUTH_SOCK: '/run/user/1000/keyring/ssh',
 XMODIFIERS: '@im=ibus',
 DESKTOP_SESSION: 'ubuntu',
 SSH_AGENT_PID: '1150',
 PWD: '/home/sammy/first-program',
 LOGNAME: 'sammy',
 GPG_AGENT_INFO: '/run/user/1000/gnupg/S.gpg-agent:0:1',
 GJS_DEBUG_TOPICS: 'JS ERROR;JS LOG',
 WINDOWPATH: '2',
 HOME: '/home/sammy',
 USERNAME: 'sammy',
 IM_CONFIG_PHASE: '2',
 LANG: 'en_US.UTF-8',
 VTE_VERSION: '5601',
 CLUTTER_IM_MODULE: 'xim',
 GJS_DEBUG_OUTPUT: 'stderr',
 LESSCLOSE: '/usr/bin/lesspipe %s %s',
 TERM: 'xterm-256color',
 LESSOPEN: '| /usr/bin/lesspipe %s',
 USER: 'sammy',
 DISPLAY: ':0',
 SHLVL: '1',
 PATH:
  '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin',
 DBUS_SESSION_BUS_ADDRESS: 'unix:path=/run/user/1000/bus',
 _: '/usr/bin/node',
 OLDPWD: '/home/sammy' }

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

Шаг 5 - Доступ к указанной переменной среды

На этом шаге вы будете просматривать переменные среды и их значения с помощью глобального объекта + process.env + и выводить их значения в консоль.

Объект + process.env + - это простое отображение имен переменных среды и их значений, хранящихся в виде строк. Как и все объекты в JavaScript, вы получаете доступ к отдельному свойству, ссылаясь на его имя в квадратных скобках.

Откройте файл + environment.js + для редактирования:

nano environment.js

Измените + console.log (process.env); + на:

environment.js

console.log(process.env);

Сохраните файл и выйдите. Теперь запустите программу + environment.js +:

node environment.js

Вывод теперь выглядит так:

Output /home/

Вместо того, чтобы печатать весь объект, вы теперь печатаете только свойство + HOME + для + process.env +, в котором хранится значение переменной окружения + $ HOME +.

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

Шаг 6 - Получение аргумента в ответ на ввод пользователя

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

Используйте + nano + для создания нового файла + echo.js +:

nano echo.js

Добавьте следующий код:

echo.js

const args = process.argv.slice(2);
console.log(process.env[args[0]]);

Первая строка + echo.js + хранит все аргументы командной строки, предоставленные пользователем, в константную переменную с именем + args +. Вторая строка печатает переменную окружения, хранящуюся в первом элементе + args +; первый аргумент командной строки, предоставленный пользователем.

Сохраните и выйдите из + nano +, затем запустите программу следующим образом:

node echo.js HOME

Теперь результат будет:

Output /home/

Аргумент + HOME + был сохранен в массив + args +, который затем использовался для поиска его значения в среде через объект + process.env +.

Теперь вы можете получить доступ к значению любой переменной среды в вашей системе. Чтобы убедиться в этом, попробуйте просмотреть следующие переменные: + PWD,` + USER`, + PATH.

Получение отдельных переменных - это хорошо, но лучше указать пользователю, сколько переменных он хочет.

Шаг 7 - Просмотр нескольких переменных среды

В настоящее время приложение может проверять только одну переменную среды одновременно. Было бы полезно, если бы мы могли принять несколько аргументов командной строки и получить их соответствующее значение в среде. Используйте + nano + для редактирования + echo.js +:

nano echo.js

Отредактируйте файл так, чтобы он имел следующий код:

echo.js

const args = process.argv.slice(2);

Метод + forEach + - это стандартный метод JavaScript для всех объектов массива. Он принимает функцию callback, которая используется при выполнении итерации по каждому элементу массива. Вы используете + forEach + в массиве + args +, предоставляя ему функцию обратного вызова, которая печатает значение текущего аргумента в среде.

Сохраните и выйдите из файла. Теперь перезапустите программу с двумя аргументами:

node echo.js HOME PWD

Вы бы увидели следующий вывод:

Output /home/
/home//first-program

Функция + forEach + обеспечивает вывод каждого аргумента командной строки в массиве + args +.

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

Шаг 8 - Обработка неопределенного ввода

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

node echo.js HOME PWD NOT_DEFINED

Вывод будет выглядеть примерно так:

Output /home/
/home//first-program
undefined

Первые две строки печатаются, как и ожидалось, а последняя строка имеет только + undefined. В JavaScript значение + undefined + означает, что переменной или свойству не было присвоено значение. Поскольку + NOT_DEFINED + не является допустимой переменной среды, она отображается как + undefined +.

Пользователю было бы более полезно увидеть сообщение об ошибке, если его аргумент командной строки не найден в среде.

Откройте + echo.js + для редактирования:

nano echo.js

Отредактируйте + echo.js + так, чтобы он имел следующий код:

echo.js

const args = process.argv.slice(2);

args.forEach(arg => {
 let envVar = process.env[arg];





});

Здесь вы изменили функцию обратного вызова, предоставленную для + forEach +, чтобы сделать следующие вещи:

  1. Получить значение аргументов командной строки в среде и сохранить его в переменной + env Var.

  2. Проверьте, является ли значение + env Var равным` + undefined`.

  3. Если + envVar + равно + undefined +, то мы печатаем полезное сообщение, указывающее, что его не удалось найти.

  4. Если переменная окружения была найдена, мы печатаем ее значение.

Теперь выполните следующую команду еще раз:

node echo.js HOME PWD NOT_DEFINED

На этот раз результат будет:

Output /home/
/home//first-program
Could not find "NOT_DEFINED" in environment

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

Заключение

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

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

Related