前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Node.js中编写和运行您的第一个程序

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

作者头像
用户2323866
修改2021-06-18 10:52:40
8.3K0
修改2021-06-18 10:52:40
举报
文章被收录于专栏:技术派技术派

Node.js是一个流行的开源运行时环境,可以使用V8 JavaScript引擎在浏览器外部执行JavaScript,该引擎与用于支持Google Chrome Web浏览器JavaScript执行的引擎相同。 Node运行时通常用于创建命令行工具和Web服务器。

学习Node.js将允许您使用相同的语言编写前端代码和后端代码。 在整个中使用JavaScript有助于缩短上下文切换的时间,并且可以在后端服务器和前端项目之间更轻松地共享库。

此外,由于支持异步执行,Node.js擅长I / O密集型任务,这使得它非常适合Web。 实时应用程序(如视频流或连续发送和接收数据的应用程序)在Node.js中编写时可以更高效地运行。

在本教程中,您将使用Node.js运行时创建第一个程序。 您将了解一些特定于Node的概念,并构建一个程序,帮助用户检查其系统上的环境变量。 为此,您将学习如何将字符串输出到控制台,接收来自用户的输入以及访问环境变量。

先决条件

要完成本教程,您需要:

第1步 - 输出到控制台

写一个“Hello,World!” 程序,打开命令行文本编辑器如nano并创建一个新文件:

代码语言:javascript
复制
nano hello.js

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

hello.js

代码语言:javascript
复制
console.log("Hello World");

Node.js中的console对象提供了简单的方法来写入stdoutstderr或任何其他Node.js流,在大多数情况下是命令行。 log方法打印到stdout流,因此您可以在控制台中看到它。

在Node.js的上下文中, 是可以接收数据的对象,如stdout流,或者可以输出数据的对象,如网络套接字或文件。 对于stdoutstderr流,发送给它们的任何数据都将显示在控制台中。 关于流的一个好处是它们很容易被重定向,例如,你可以将程序的输出重定向到一个文件。

CTRL+X保存并退出nano ,当提示保存文件时,按Y 现在您的程序已准备好运行。

第2步 - 运行程序

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

代码语言:javascript
复制
node hello.js

hello.js程序将执行并显示以下输出:

代码语言:javascript
复制
Output Hello World

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

虽然代码中必须使用引号来指示文本是字符串,但它们不会打印到屏幕上。

确认该程序有效后,让它更具互动性。

第3步 - 通过命令行参数接收用户输入

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

命令行工具通常接受修改其行为的各种参数。 例如,使用--version参数运行node打印已安装的版本,而不是运行解释器。 在此步骤中,您将通过命令行参数使代码接受用户输入。

使用nano创建一个新文件arguments.js

代码语言:javascript
复制
nano arguments.js

输入以下代码:

arguments.js

代码语言:javascript
复制
console.log(process.argv);

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

通过键入CTRL+X保存并退出nano ,当提示保存文件时,按Y

现在,当您运行此程序时,您提供了如下命令行参数:

代码语言:javascript
复制
node arguments.js hello world

输出如下所示:

代码语言:javascript
复制
Output [ '/usr/bin/node',
  '/home/sammy/first-program/arguments.js',
  'hello',
  'world' ]

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

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

代码语言:javascript
复制
nano arguments.js

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

arguments.js

代码语言:javascript
复制
console.log(process.argv.slice(2));

因为argv是一个数组,所以您可以使用JavaScript的内置slice方法返回一系列元素。 当您提供带有2作为参数的slice函数时,您将获得第二个元素之后argv所有元素; 也就是说,用户输入的参数。

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

代码语言:javascript
复制
node arguments.js hello world

现在,输出看起来像这样:

代码语言:javascript
复制
Output [ 'hello', 'world' ]

现在您可以收集用户的输入,让我们从程序的环境中收集输入。

第4步 - 访问环境变量

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

使用nano创建一个新的文件environment.js

代码语言:javascript
复制
nano environment.js

添加以下代码:

environment.js

代码语言:javascript
复制
console.log(process.env);

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

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

代码语言:javascript
复制
node environment.js

运行程序后,您应该看到类似于以下内容的输出:

代码语言:javascript
复制
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文件进行编辑:

代码语言:javascript
复制
nano environment.js

更改console.log(process.env); 至:

environment.js

代码语言:javascript
复制
console.log(process.env["HOME"]);

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

代码语言:javascript
复制
node environment.js

输出现在看起来像这样:

代码语言:javascript
复制
Output /home/sammy

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

同样,请记住,此代码的输出可能与您在此处看到的不同,因为它特定于您的系统。 既然您可以指定要检索的环境变量,则可以通过询问用户要查看的变量来增强程序。

第6步 - 检索响应用户输入的参数

接下来,您将使用读取命令行参数和环境变量的功能来创建命令行实用程序,该实用程序将环境变量的值输出到屏幕。

使用nano创建一个新文件echo.js

代码语言:javascript
复制
nano echo.js

添加以下代码:

echo.js

代码语言:javascript
复制
const args = process.argv.slice(2);
console.log(process.env[args[0]]);

echo.js的第一行存储用户提供给名为args的常量变量的所有命令行参数。 第二行打印存储在args的第一个元素中的环境变量; 也就是说,用户提供的第一个命令行参数。

保存并退出nano ,然后按如下方式运行程序:

代码语言:javascript
复制
node echo.js HOME

现在,输出将是:

代码语言:javascript
复制
Output /home/sammy

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

此时,您现在可以访问系统上任何环境变量的值。 要验证这一点,请尝试查看以下变量: PWDUSERPATH

检索单个变量很好,但让用户指定他们想要的变量数会更好。

第7步 - 查看多个环境变量

目前,应用程序一次只能检查一个环境变量。 如果我们可以接受多个命令行参数并在环境中获取它们的相应值,那将非常有用。 使用nano编辑echo.js

代码语言:javascript
复制
nano echo.js

编辑文件,使其具有以下代码:

echo.js

代码语言:javascript
复制
const args = process.argv.slice(2);

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

forEach方法是所有数组对象的标准JavaScript方法。 它接受一个回调函数 ,用于迭代数组的每个元素。 你在args数组上使用forEach ,为它提供一个回调函数,用于在环境中打印当前参数的值。

保存并退出该文件。 现在用两个参数重新运行程序:

代码语言:javascript
复制
node echo.js HOME PWD

你会看到以下输出:

代码语言:javascript
复制
Output /home/sammy
/home/sammy/first-program

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

现在您可以检索用户要求的变量,但我们仍然需要处理用户输入错误数据的情况。

第8步 - 处理未定义的输入

要查看如果为程序提供的参数不是有效的环境变量会发生什么,请运行以下命令:

代码语言:javascript
复制
node echo.js HOME PWD NOT_DEFINED

输出类似于以下内容:

代码语言:javascript
复制
Output /home/sammy
/home/sammy/first-program
undefined

前两行按预期打印,最后一行仅undefined 。 在JavaScript中, undefined值意味着尚未为变量或属性赋值。 由于NOT_DEFINED不是有效的环境变量,因此它显示为undefined

如果在环境中找不到命令行参数,则用户查看错误消息会更有帮助。

打开echo.js进行编辑:

代码语言:javascript
复制
nano echo.js

编辑echo.js ,使其具有以下代码:

echo.js

代码语言:javascript
复制
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. 获取环境中的命令行参数值并将其存储在变量envVar
  2. 检查envVar的值是否undefined
  3. 如果envVar undefined ,那么我们会打印一条有用的消息,指出无法找到它。
  4. 如果找到环境变量,我们将打印其值。

注意console.error函数通过stderr流将消息输出到屏幕,而console.log通过stdout流打印到屏幕。 当您通过命令行运行此程序时,您将不会注意到stdoutstderr流之间的区别,但最好通过stderr流打印错误,以便更容易识别和处理其他程序, 可以分辨出来。

现在再次运行以下命令:

代码语言:javascript
复制
node echo.js HOME PWD NOT_DEFINED

这次输出将是:

代码语言:javascript
复制
Output /home/sammy
/home/sammy/first-program
Could not find "NOT_DEFINED" in environment

现在,当您提供的命令行参数不是环境变量时,您会收到一条明确的错误消息,说明如此。

结论

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

如果你想进一步,你可以更改这个程序的行为。 例如,您可能希望在打印之前验证命令行参数。 如果参数未定义,则可以返回错误,并且只有在所有参数都是有效的环境变量时,用户才会获得输出。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 先决条件
  • 第1步 - 输出到控制台
  • 第2步 - 运行程序
  • 第3步 - 通过命令行参数接收用户输入
  • 第4步 - 访问环境变量
  • 第5步 - 访问指定的环境变量
  • 第6步 - 检索响应用户输入的参数
  • 第7步 - 查看多个环境变量
  • 第8步 - 处理未定义的输入
  • 结论
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档