安装与配置

64 位安装包下载地址 : https://nodejs.org/dist/v4.4.3/node-v4.4.3-x64.msi
检查是否安装成功:cmd中输入node --version
用npm安装express模块:cmd中输入npm install express
这里有个坑就是如果你不是使用全局安装,你需要在cmd中先跳到你指定的位置路径再输入指令安装

Node.js 应用的组成

1.引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块。

2.创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。

3.接收请求与响应请求:服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据

Node.js的交互解释器

Node 的交互式解释器可以很好的调试 Javascript 代码,再安装配置完成之后,在cmd中输入node即可进入调试
REPL 命令:

ctrl + c - 退出当前终端。

ctrl + c- 按下两次 - 退出 Node REPL。

ctrl + d - 退出 Node REPL.

向上/向下 键 - 查看输入的历史命令

tab 键 - 列出当前命令

.help - 列出使用命令

.break - 退出多行表达式

.clear - 退出多行表达式

.save filename - 保存当前的 Node REPL 会话到指定文件

.load filename - 载入当前 Node REPL 会话的文件内容。
下划线()变量:使用下划线()获取上一个表达式的运算结果

回调函数

回调函数在完成任务后就会被调用,这样将可以实现一定意义上的异步,不需要等待某一步的完成即可到下一步,见下面的例子:

var fs = require("fs");

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

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

EventEmitter

可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件

// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();

绑定事件处理:

// 绑定事件及事件的处理程序
eventEmitter.on('eventName', eventHandler);

例如:

// 创建事件处理程序
var connectHandler = function connected() {
   console.log('连接成功。');
  
   // 触发 data_received 事件 
   eventEmitter.emit('data_received');
}

// 绑定 connection 事件处理程序
eventEmitter.on('connection', connectHandler);

或者直接绑定的时候定义函数:

// 使用匿名函数绑定 data_received 事件
eventEmitter.on('data_received', function(){
   console.log('数据接收成功。');
});

程序中主动触发事件:

// 触发事件
eventEmitter.emit('eventName');

注意:大多数时候我们不会直接使用 EventEmitter,而是在对象中继承它。包括 fs、net、 http 在内的,只要是支持事件响应的核心模块都是 EventEmitter 的子类。

Stream(流)

读取数据:

var fs=require('fs');
var data='';
//创建可读流
var readerStream=fs.createReadStream('test.txt');
//设置编码为utf8
readerStream.setEncoding('UTF8');
//处理流事件-->data,end,and error
readerStream.on('data',function(chunk){
    data+=chunk;
});
readerStream.on('end',function(){
    console.log(data);
});
readerStream.on('error',function(err){
    console.log(err.stack);
});
console.log("程序执行完毕");

写入数据:

var fs=require('fs');
var data='你好Node.js';
//创建一个可以写入的流,写入到文件output.txt中
var writerStream=fs.createWriteStream('test.txt');
//使用utf-8编码写入数据
writerStream.write(data,'UTF8');
//标记文件末尾
writerStream.end();
//处理流事件-->finish和error
writerStream.on('finish',function(){
    console.log("写入完成!");
});
writerStream.on('error',function(err){
    console.log(err.stack);
});
console.log("程序执行完毕");

管道流:
管道提供了一个输出流到输入流的机制。通常我们用于从一个流中获取数据并将数据传递到另外一个流中。

var fs=require('fs');
//创建一个可读流
var readerSream=fs.createReadStream('test1.txt');
//创建一个可写流
var writeStream=fs.createWriteStream('test2.txt');
//管道读写操作
//读取test1.txt的内容,并将内容写入到test2.txt中
readerSream.pipe(writeStream);
console.log("程序执行完毕");