Node.js学习(一)
安装与配置
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("程序执行完毕");