Node.JS 学习记录(01)

2022-10-26 16:53:47 浏览数 (2)

下载安装

64 位安装包下载地址 : https://nodejs.org/dist/v4.4.3/node-v4.4.3-x64.msi

Node.js REPL(交互式解释器)

Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并接收系统的响应。

Node 自带了交互式解释器,可以执行以下任务:

读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存中。

执行 - 执行输入的数据结构

打印 - 输出结果

循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。

Node 的交互式解释器可以很好的调试 Javascript 代码。

开始学习 REPL 在CMD中输入以下命令来启动 Node 的终端:

代码语言:javascript复制
>node

简单的表达式运算

代码语言:javascript复制
> 1  4
5
> 5 / 2
2.5
> 3 * 6
18
> 4 - 1
3
> 1   ( 2 * 3 ) - 4
3
>

使用变量

你可以将数据存储在变量中,并在你需要的时候使用它。

变量声明需要使用 var 关键字,如果没有使用 var 关键字变量会直接打印出来。

使用 var 关键字的变量可以使用 console.log() 来输出变量

代码语言:javascript复制
> x = 10
10
> var y = 10
undefined
> x   y
20
> console.log("Hello World")
Hello World
undefined
> console.log("www.runoob.com")
www.runoob.com
undefined

多行表达式 Node REPL 支持输入多行表达式,这就有点类似 JavaScript。接下来让我们来执行一个 do-while 循环:

代码语言:javascript复制
> var x = 0
undefined
> do {
... x  ;
... console.log("x: "   x);
... } while ( x < 5 );
x: 1
x: 2
x: 3
x: 4
x: 5
undefined
>

下划线(_)变量 你可以使用下划线(_)获取上一个表达式的运算结果:

代码语言:javascript复制
> var x = 10
undefined
> var y = 20
undefined
> x   y
30
> var sum = _
undefined
> console.log(sum)
30
undefined
>

REPL 命令

  • ctrl c - 退出当前终端。
  • ctrl c 按下两次 - 退出 Node REPL。
  • ctrl d - 退出 Node REPL.
  • 向上/向下 键 - 查看输入的历史命令
  • tab 键 - 列出当前命令
  • .help - 列出使用命令
  • .break - 退出多行表达式
  • .clear - 退出多行表达式
  • .save filename - 保存当前的 Node REPL 会话到指定文件
  • .load filename - 载入当前 Node REPL 会话的文件内容。

停止 REPL 按下两次 ctrl c 键就能退出 REPL:

NPM 使用介绍 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:

允许用户从NPM服务器下载别人编写的第三方包到本地使用。 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。 由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 “npm -v” 来测试是否成功安装。命令如下,出现版本提示表示安装成功:

代码语言:javascript复制
>npm -V
2.15.1

使用 npm 命令安装模块 npm 安装 Node.js 模块语法格式如下:

代码语言:javascript复制
$ npm install <Module Name>

以下实例,我们使用 npm 命令安装常用的 Node.js web框架模块 express:

代码语言:javascript复制
$ npm install express

安装好之后,express 包就放在了工程目录下的 node_modules 目录中,因此在代码中只需要通过 require(‘express’) 的方式就好,无需指定第三方包路径。

代码语言:javascript复制
var express = require('express');

全局安装与本地安装 npm 的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如

npm install express # 本地安装 npm install express -g # 全局安装 如果出现以下错误:

npm err! Error: connect ECONNREFUSED 127.0.0.1:8087

解决办法为:

代码语言:javascript复制
$ npm config set proxy null

本地安装

  1. 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
  2. 可以通过 require() 来引入本地安装的包。

全局安装 3. 将安装包放在 /usr/local 下或者你 node 的安装目录。 4. 可以直接在命令行里使用。 如果你希望具备两者功能,则需要在两个地方安装它或使用 npm link。

接下来我们使用全局方式安装 express

代码语言:javascript复制
$ npm install express -g
代码语言:javascript复制
>npm install express -g
express@4.16.3 C:UsersWuDGAppDataRoamingnpmnode_modulesexpress
├── escape-html@1.0.3
├── array-flatten@1.1.1
├── setprototypeof@1.1.0
├── utils-merge@1.0.1
├── cookie-signature@1.0.6
├── merge-descriptors@1.0.1
├── content-type@1.0.4
├── encodeurl@1.0.2
├── methods@1.1.2
├── etag@1.8.1
├── range-parser@1.2.0
├── content-disposition@0.5.2
├── cookie@0.3.1
├── vary@1.1.2
├── parseurl@1.3.2
├── fresh@0.5.2
├── serve-static@1.13.2
├── path-to-regexp@0.1.7
├── statuses@1.4.0
├── safe-buffer@5.1.1
├── depd@1.1.2
├── qs@6.5.1
├── on-finished@2.3.0 (ee-first@1.1.1)
├── debug@2.6.9 (ms@2.0.0)
├── finalhandler@1.1.1 (unpipe@1.0.0)
├── proxy-addr@2.0.4 (forwarded@0.1.2, ipaddr.js@1.8.0)
├── accepts@1.3.5 (negotiator@0.6.1, mime-types@21.20)
├── type-is@1.6.16 (media-typer@0.3.0, mime-types@2.1.20)
├── send@0.16.2 (destroy@1.0.4, ms@2.0.0, mime@1.4.1, http-errors@1.6.3)
└── body-parser@1.18.2 (bytes@3.0.0, http-errors@1.6.3, iconv-lite@0.4.19, raw-body@2.3.2)

查看安装信息 你可以使用以下命令来查看所有全局安装的模块:

代码语言:javascript复制
> npm list -g

使用 package.json package.json 位于模块的目录下,用于定义包的属性。接下来让我们来看下 express 包的 package.json 文件,位于 node_modules/express/package.json

Package.json 属性说明

  • name - 包名。
  • version - 包的版本号。
  • description - 包的描述。
  • homepage - 包的官网 url 。
  • author - 包的作者姓名。
  • contributors - 包的其他贡献者姓名。
  • dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。
  • repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
  • main - main 字段指定了程序的主入口文件,require(‘moduleName’) 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。
  • keywords - 关键字 卸载模块 我们可以使用以下命令来卸载 Node.js 模块。

npm uninstall express

卸载后,你可以到 /node_modules/ 目录下查看包是否还存在,或者使用以下命令查看:

代码语言:javascript复制
npm ls

更新模块 我们可以使用以下命令更新模块:

代码语言:javascript复制
npm update express

搜索模块 使用以下来搜索模块:

npm search express 创建模块 创建模块,package.json 文件是必不可少的。我们可以使用 NPM 生成 package.json 文件,生成的文件包含了基本的结果。

代码语言:javascript复制
npm init

This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible defaults. See npm help json for definitive documentation on these fields and exactly what they do. Use npm install <pkg> --save afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. name: (node_modules) runoob # 模块名 version: (1.0.0) description: Node.js 测试模块(www.runoob.com) # 描述 entry point: (index.js) test command: make test git repository: https://github.com/runoob/runoob.git # Github 地址 keywords: author: license: (ISC) About to write to ……/node_modules/package.json: # 生成地址 { “name”: “runoob”, “version”: “1.0.0”, “description”: “Node.js 测试模块(www.runoob.com)”, …… } Is this ok? (yes) yes

以上的信息,你需要根据你自己的情况输入。在最后输入 “yes” 后会生成 package.json 文件。

接下来我们可以使用以下命令在 npm 资源库中注册用户(使用邮箱注册):

npm adduser Username: mcmohd Password: Email: (this IS public) mcmohd@gmail.com

接下来我们就用以下命令来发布模块:

npm publish 如果你以上的步骤都操作正确,你就可以跟其他模块一样使用 npm 来安装。

Node.js 回调函数

Node.js 异步编程的直接体现就是回调。

异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。

回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。

例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回。这样在执行代码时就没有阻塞或等待文件 I/O 操作。这就大大提高了 Node.js 的性能,可以处理大量的并发请求。

回调函数一般作为函数的最后一个参数出现:

代码语言:javascript复制
function foo1(name, age, callback) { }
function foo2(value, callback1, callback2) { }

阻塞代码实例 创建一个文件 input.txt ,内容如下:

菜鸟教程官网地址:www.runoob.com

创建 main.js 文件, 代码如下:

代码语言:javascript复制
var fs = require("fs");
var data = fs.readFileSync('input.txt');
console.log(data.toString());
console.log("程序执行结束!");

//注意txt文件默认采用非UTF-8,需要手动设置成支持中文的UTF-8 以上代码执行结果如下:

$ node main.js 菜鸟教程官网地址:www.runoob.com 程序执行结束!

非阻塞代码实例 创建一个文件 input.txt ,内容如下:

代码语言:javascript复制
菜鸟教程官网地址:www.runoob.com

创建 main.js 文件, 代码如下:

代码语言:javascript复制
var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
    if (err) return console.error(err);
    console.log(data.toString());
});

console.log("程序执行结束!");

以上代码执行结果如下:

$ node main.js 程序执行结束! 菜鸟教程官网地址:www.runoob.com

0 人点赞