如何在Node.js中编写和运行你的第一个应用程序

0 股票
0
0
0
0

介绍

Node.js 是一个流行的开源运行时环境,它使用 V8 JavaScript 引擎(与 Google Chrome 浏览器中用于执行 JavaScript 的引擎相同)在浏览器之外执行 JavaScript 代码。Node 运行时环境通常用于创建命令行工具和 Web 服务器。.

学习 Node.js 可以让您使用同一种语言编写前端和后端代码。在整个技术栈中使用 JavaScript 可以减少上下文切换时间,并且后端服务器和前端项目之间更容易共享库。.

此外,由于Node.js支持异步执行,因此它在处理I/O密集型任务方面表现出色,这使其非常适合Web开发。实时应用程序,例如视频流或需要不断发送和接收数据的应用程序,使用Node.js编写时可以运行得更加高效。.

在本教程中,你将使用 Node.js 运行时创建你的第一个应用程序。你将学习一些特定的 Node 概念,并逐步创建一个帮助用户检查系统环境变量的应用程序。为此,你将学习如何向控制台输出字符串、接收用户输入以及访问环境变量。.

先决条件

要完成本教程,您需要:

  • 您的开发机器上已安装 Node.js。本教程使用 Node.js 版本 10.16.0。要在 macOS 或 Ubuntu 18.04 上安装 Node.js,请按照«如何在 macOS 上安装 Node.js 并创建本地开发环境»中的步骤操作,或按照“如何在 Ubuntu 18.04 上安装 Node.js”中的“使用 PPA 安装”部分操作。.
  • 您可以在这里找到基本的 JavaScript 知识:如何编写 JavaScript 代码。.

步骤 1 – 输出到控制台

要编写一个“Hello, world!”程序,请打开像nano这样的命令行文本编辑器,并创建一个新文件:

nano hello.js

打开文本编辑器后,输入以下代码:

console.log("Hello World");

Node.js 中的 console 对象提供了一些简单的方法,用于向 stdout、stderr 或任何其他 Node.js 流(通常是命令行)写入内容。log 方法会将输出打印到 stdout 流,因此您可以在控制台中看到它。.

在 Node.js 中,流(stream)是指可以接收数据的对象,例如标准输出流(stdout),也可以是可以输出数据的对象,例如网络套接字或文件。对于标准输出流和标准错误流(stderr),发送到它们的任何数据都会显示在控制台中。流的一个重要特性是它们易于重定向,因此您可以将程序的输出重定向到文件。.

按 CTRL+X 保存并退出 nano 编辑器,当提示保存文件时,按 Y。现在你的程序就可以运行了。.

步骤 2 – 运行程序

要运行此程序,请使用如下的 node 命令:

node hello.js

hello.js 程序运行后显示以下输出:

Output
Hello World

Node.js 解释器读取了该文件,并通过调用全局 console 对象的 log 方法执行了 console.log(“Hello World”)。字符串“Hello World”作为参数传递给了 log 函数。.

虽然代码中需要使用引号来表示文本是字符串,但它们不会打印在屏幕上。.

确认程序运行正常后,让我们使其更具互动性。.

步骤 3 – 通过命令行参数获取用户输入

每次运行 Node.js 的“Hello, World!”程序,都会产生相同的输出。为了让程序更具动态性,我们需要获取用户输入并将其显示在屏幕上。.

命令行工具通常接受各种参数来改变其行为。例如,使用 `--version` 参数运行 `node` 命令会打印已安装的版本号,而不是运行解释器。至此,您已通过命令行参数接受了您的代码。.

使用 nano 编辑器创建一个新的 arguments.js 文件:

nano arguments.js

请输入以下验证码:

console.log(process.argv);

process 对象是一个全局 Node.js 对象,其中包含与正在运行的 Node.js 进程相关的所有函数和数据。argv 属性是一个字符串数组,其中包含传递给程序的所有命令行参数。.

按 CTRL+X 保存并退出 nano 编辑器,出现保存文件提示时按 Y。.

现在运行这个程序时,你需要提供一个类似这样的命令行参数:

node arguments.js hello world

输出结果如下:

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

process.argv 数组中的第一个参数始终是运行程序的 Node.js 二进制文件的位置。第二个参数始终是正在执行的文件的位置。其余参数是用户输入的内容,在本例中为:hello world。.

我们更关注用户输入的参数,而不是Node.js提供的默认参数。打开arguments.js文件进行编辑:

nano arguments.js

将 console.log(process.arg); 改为以下内容:

console.log(process.argv.slice(2));

由于 argv 是一个数组,你可以使用 JavaScript 内置的 slice 方法,它会返回一个元素集合。当你将 slice 函数的参数设置为 2 时,你会得到 argv 中第二个元素之后的所有元素,也就是用户输入的参数。.

使用 node 命令和与上次相同的参数再次运行程序:

node arguments.js hello world

现在,输出结果如下:

Output
[ 'hello', 'world' ]

既然现在可以从用户那里收集输入,那么让我们从应用程序环境中收集输入吧。.

步骤 4 – 访问环境变量

环境变量是存储在应用程序外部、由操作系统提供的键值数据。它们通常由系统或用户设置,并可供所有正在运行的进程用于配置或状态管理。您可以使用 Node 进程对象访问它们。.

使用 nano 编辑器创建一个新的环境文件。.

nano environment.js

添加以下代码:

console.log(process.env);

env 对象存储 Node.js 应用程序运行时可用的所有环境变量。.

像之前一样保存并退出,然后使用 node 命令运行 environment.js 文件。.

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); 改为:

console.log(process.env["HOME"]);

保存文件并退出。现在运行 environment.js 应用程序:

node environment.js

现在输出结果如下所示:

Output
/home/sammy

现在,您不再打印整个对象,而是只打印 process.env 的 HOME 属性,该属性存储 $HOME 环境变量的值。.

再次提醒,这段代码的输出结果可能与您在此处看到的结果有所不同,因为它取决于您的系统。现在您可以指定要检索的环境变量,您可以通过询问用户他们想要查看的变量来增强您的应用程序。.

步骤 6 – 根据用户输入检索参数

接下来,您将利用读取命令行参数和环境变量的功能,创建一个命令行工具,将环境变量的值打印到屏幕上。.

使用 nano 编辑器创建一个新的 echo.js 文件:

nano 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/sammy

HOME 参数存储在 args 数组中,然后通过 process.env 对象在环境中查找其值。.

现在您可以访问系统上任何环境变量的值。为了验证这一点,请查看以下变量:PWD、USER、PATH。.

检索单个变量是可以的,但允许用户指定他们想要的变量数量会更好。.

步骤 7 – 查看多个环境变量

目前,该程序一次只能检查一个环境变量。如果能够接受多个命令行参数并获取它们在环境中的对应值,那就太好了。使用 nano 编辑器编辑 echo.js 文件:

nano echo.js

编辑该文件,使其包含以下代码:

const args = process.argv.slice(2);
args.forEach(arg => {
console.log(process.env[arg]);
});

`forEach` 方法是 JavaScript 中所有数组对象的标准方法。它接受一个回调函数,用于遍历数组中的每个元素。你可以对 `args` 数组使用 `forEach` 方法,并提供一个回调函数,该函数会将当前参数的值打印到环境中。.

保存并退出文件。现在再次运行程序,并传入两个参数:

node echo.js HOME PWD

您将看到以下输出:

[secondary_label Output] 
/home/sammy
/home/sammy/first-program

forEach 函数确保每个命令行参数都打印到 args 数组中。.

现在我们有了检索用户请求的变量的方法,但我们仍然需要处理用户输入错误数据的情况。.

步骤 8 – 处理未指定的输入

要查看如果给程序提供一个无效的环境变量参数会发生什么情况,请运行以下命令:

node echo.js HOME PWD NOT_DEFINED

输出结果将类似于下图:

[secondary_label Output] 
/home/sammy
/home/sammy/first-program
undefined

前两行输出正常,最后一行显示为 undefined。在 JavaScript 中,undefined 值表示变量或属性尚未赋值。由于 NOT_DEFINED 不是有效的环境变量,因此显示为 undefined。.

如果环境中找不到用户的命令行参数,最好能向用户显示错误消息。.

打开 echo.js 文件进行编辑:

nano echo.js

编辑 echo.js 文件,使其包含以下代码:

const args = process.argv.slice(2);
args.forEach(arg => {
let envVar = process.env[arg];
if (envVar === undefined) {
console.error(`Could not find "${arg}" in environment`);
} else {
console.log(envVar);
}
});

在这里,您修改了提供给 forEach 的回调函数,使其执行以下操作:

  1. 获取环境中的命令行参数值,并将其存储在环境变量中。.
  2. 检查环境变量值是否未定义。.
  3. 如果未定义 envVar,我们会打印一条提示信息,指出未找到该变量。.
  4. 如果找到环境变量,则打印其值。.

现在再次运行以下命令:

node echo.js HOME PWD NOT_DEFINED

这次的输出结果将是:

[secondary_label Output] 
/home/sammy
/home/sammy/first-program
Could not find "NOT_DEFINED" in environment

现在,如果您提供的命令行参数不是环境变量,您将收到一条明确的错误消息,说明这一点。.

结果

你的第一个程序在屏幕上显示了“Hello World”,现在你已经编写了一个 Node.js 命令行工具,它可以读取用户参数来显示环境变量。.

如果您想更进一步,还可以修改程序的行为。例如,您可以在打印输出之前验证命令行参数。如果某个参数未定义,您可以返回错误,并且只有当所有参数都是有效的环境变量时,用户才能看到输出。.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

您可能也喜欢