开始去了解node.js

Node.js简介

  • Node.js是运行在服务端的JavaScript,是一个事件驱动I/O服务端Javascript环境。
  • 查看版本:
    1
    node -v
  • node版本管理工具nvm

Node.js应用

  • Node.js应用的构成:
    • 引入required模块
    • 创建服务器
    • 接收请求与响应请求

创建Node.js应用

  • 步骤一:引入required模块
    • 使用require指令来载入http模块,并将实例化的HTTP复制给变量http,实例如下:
1
var http = require("http");
  • 步骤二:创建服务器
  1. 创建一个server.js的文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
var http = require("http");

http.createServer(function(request,response){
//发送http头部
//HTTP状态值:200 :OK
//内容类型:text/plain
response.writeHead(200,{'Content-Type':'text/plain'});
//发送响应数据 “Hello World”
response.end('Hello World\n');
}).listen(8888);

//终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
  1. 使用node命令执行以上代码
1
node server.js
  1. 访问http://127.0.0.1:8888/

npm使用介绍

  • 查看npm版本
1
npm -v
  • 升级版本
1
npm install npm -g
  • 安装包
1
2
npm install <Module Name>          # 本地安装
npm install <Module Name> -g # 全局安装
  • 查看安装信息
1
2
3
npm list -g                        # 查看全局安装的模块
npm list <Module Name> # 查看某个模块的版本号
npm ls # 查看当前目录下的包信息
  • 卸载模块
1
npm uninstall <Module Name>
  • 更新模块
1
npm update <Module Name>
  • 搜索模块
1
npm search <Module Name>
  • 创建模块
1
2
3
4
5
6
7
8
$npm init                            # 会自动生成package.json

$npm adduser # 在npm资源库中注册用户
Username:XXXX
Password:XXXXXXX
Email: XXXXXXXXX@XXX.XXX

$npm publish # 发布模块

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

  • REPL(Read Eval Print Loop:交互式解释器),Node自带交互式解释器,可以执行读取,执行,打印,循环等任务
  • 在Node的REPL中可以执行:
  1. 简单的表达式运算
1
2
3
4
5
6
$ node
> 1+4
5
> 5/2
2.5
>
  1. 使用变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ node
> 1+4
5
> 5/2
2.5
> x=10
10
> var y=10
undefined
> x+y
20
> console.log("Hello World!")
Hello World!
undefined
>
  1. 多行表达式
1
2
3
4
5
6
7
8
9
10
11
12
$ node
> do {
... x++;
... console.log("x:"+x);
... }while(x<5);
x:1
x:2
x:3
x:4
x:5
undefined
>
  1. 下划线变量[使用下划线(_)获取上一个表达式的运算结果]
1
2
3
4
5
6
7
8
9
10
11
12
13
$ node
> var x=10;
undefined
> y=10;
10
> x+y
20
> var sum=_
undefined
> console.log(sum)
20
undefined
>
  1. 两次ctrl+c停止REPL

Node.js的回调函数

  • Node.js异步编程的直接体现就是回调
  • 阻塞代码实例
  • 创建一个文件 input.txt ,内容如下:
1
Hello world!
  • 创建 main.js 文件, 代码如下:
1
2
3
4
5
6
var fs = require("fs");

var data = fs.readFileSync('input.txt');

console.log(data.toString());
console.log("程序执行结束!");
  • 以上代码执行结果如下:
1
2
3
4
$ node main.js
Hello World!

程序执行结束!
  • 非阻塞代码实例
  • 创建一个文件 input.txt ,内容如下:
1
Hello World!
  • 创建 main.js 文件, 代码如下:
1
2
3
4
5
6
7
8
var fs = require("fs");

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

console.log("程序执行结束!");
  • 以上代码执行结果如下:
1
2
3
$ node main.js
程序执行结束!
Hello World!
  • 第一个实例在文件读取完后才执行完程序。 第二个实例我们不需要等待文件读取完,这样就可以在读取文件时同时执行接下来的代码,大大提高了程序的性能。
  • 因此,阻塞是按顺序执行的,而非阻塞是不需要按顺序的,所以如果需要处理回调函数的参数,我们就需要写在回调函数内。