npm全称为Node Package Manager,是一个基于Node.js的包管理器
Node.js REPL(交互式解释器Read Eval Print Loop)
表示一个电脑的环境,Window系统的终端、linux shell.
Node.js回调函数
回调是异步编程的直接体现。
同步读取文件(阻塞)
var fs = require(‘fs’);
var data = fs.readFileSync(‘input.txt’);
console.log(data.toString());
console.log(‘程序执行结束’);
//先执行文件操作,再执行最后的打印。
异步读取文件(非阻塞)
Node.js事件循环
Node.js是单线程单进程应用程序,但是通过事件回调支持并发。
Node.js事件
required(‘events’); //引入事件模块
events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就 是事件发射与事件监听器功能的封装。{支持多个事件监听}
{如果有多个同名的事件,会按顺序去执行}
EventEmitter常用的API
- 注册监听器
EventEmitter.on(event,listener);
emitter.addListener(event.listener);
//event:字符串
//listener:回调函数
-
发射Event事件
EventEmitter.emit(event,[arg1],[arg2])
EventEmitter.once(event,listener) //为指定事件注册一个最多只能触发一次的监听器。触发之后解除改监听器。 -
移除指定的某个监听器,listener必须是已经被注册过的监听器
EventEmitter.removeListener(event, listener)
EventEmitter.removeAllListeners([event])移除所有事件的所有监听器, 如果指定 event,则移除指定事件的所有监听器。 -
error事件
缓冲区
Node.js语言自身只有字符串数据类型,没有二进制数据类型。
处理TCP流或文件流时,必须使用二进制数据,所以定义了一个buffer类,创建一个专门存放二进制数据的缓冲区。 -
创建buffer类:
1、var buf = new Buffer(10); //创建长度为10自己的buffer实例
2、var buf = new Buffer([10,20,30,40]); //给给定的数组创建buffer实例
3、var buf = new Buffer(’“ewewewe”,“utf-8”); //通过一个字符串来创建buffer实例
- 写入缓冲区
buf.write(string,[offset],[length],[encoding]) //返回值实际写入的大小,返回实际写入的大小。如果 buffer 空间不足, 则只会写入部分字符串
string : 写入的字符串
offset : 缓冲区开始写入的索引值
length : 写入的字节数
encoding : 使用的编码。默认为utf-8
- 从缓冲区取数据
buf.toString(encoding,[start],[end])
- 将buffer转换为JSON对象
buf.toJSON()
- 缓冲区合并
Buffer.concat(list,totalLength);
list : 用于合并的buffer对象数组列表
totalLength ; 指定合并后Buffer对象的长度。
- 缓冲区比较
buf.compare(otherBuffer);
- 拷贝缓冲区
buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
buffer1.copy(buffer2);
//buffer2 内容是拷贝 buffer1 的
- 缓冲区裁剪
buf.slice([start[, end]])
//start - 数字, 可选, 默认: 0
end - 数字, 可选, 默认: buffer.length
Node.js stream流
该抽象接口是可读、可写或是既可读又可写的,通过这些接口,我们可以和磁盘文件、套接字、HTTP请求来交互,实现数据从一个地方流动到另一个地方的功能。
Node.js,Stream 有四种流类型:
Readable - 可读操作。
Writable - 可写操作。
Duplex - 可读可写操作.
Transform - 操作被写入数据,然后读出结果。
所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:
data - 当有数据可读时触发。
end - 没有更多的数据可读时触发。
error - 在接收和写入过程中发生错误时触发。
finish - 所有数据已被写入到底层系统时触发。
链式流压缩文件和解压文件
Node.js模块系统
- 创建模块
Node.js 提供了exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象
Node.js函数
Node.js路由
Node.js全局对象
global全局对象无需引用就可以直接使用。
Node.js中能够直接访问的对象都是global的属性。【console、porcess】等
{在最外层定义的变量、全局对象的属性、未定义直接赋值的变量}
process:它用于描述当前Node.js 进程状态 的对象,提供了一个与操作系统的简单接口。
Node.js常用工具util
util作为Node.js的一个核心模块,能够提供常用函数的集合,弥补核心JavaScript的功能过于精简的不足。
-
util.inherits:实现对象间原型继承的函数
Sub仅仅继承了Base在原型中定义的函数,而构造函数内部创造的base属性和sayHello函数都没有被Sub继承。同时继承原型的方法不会被console.log()打印出来。
-
util.inspect(object,[showHidden],[depth],[colors])
方法可以将任意对象转换为字符串,通常用于调试和错误输出。它至少接受一个object参数,即要转换的对象。
showHidden是一个可选参数,如果值为true,将会输出更多隐藏信息。
depth表示最大递归的层数,如果对象很复杂,你可以指定层数以控制输出信息的多少。如果不指定depth,则默认递归2层,指定为null时表示将不限递归层数完整遍历对象。 -
util.isArray(object)
如果给定的参数 “object” 是一个数组返回true,否则返回false。 -
util.isRegExp(object)
如果给定的参数"object"是一个正则表达式返回true,否则返回false。 -
util.isDate(object)
如果给定的参数 “object” 是一个日期返回true,否则返回false。 -
util.isError(object)
如果给定的参数 “object” 是一个错误对象返回true,否则返回false。
Node.js文件系统
Node.js文件系统被封装在fs模块中,它提供了文件的读取、写入、更名、删除、遍历目录、链接等POSIX文件系统操作。
fs的所有模块都有异步和同步两个版本
-
fs.readFile(filename,[encoding],[callback(err,data)])、【fs.readFileSync()同步读取文件】
-
fs.open(path, flags, [mode], [callback(err, fd)])
flag:
r :以读取模式打开文件。
r+ :以读写模式打开文件。
w :以写入模式打开文件,如果文件不存在则创建。
w+ :以读写模式打开文件,如果文件不存在则创建。
a :以追加模式打开文件,如果文件不存在则创建。
a+ :以读取追加模式打开文件,如果文件不存在则创建 -
fs.read(fd, buffer, offset, length, position, [callback(err, bytesRead, buffer)])
fd: 读取数据并写入buffer指向的缓冲区对象。
offset: 是buffer的写入偏移量。
length: 是要从文件中读取的字节数。
position: 是文件读取的起始位置,如果position的值为null,则会从当前文件指针的位置读取。
callback:回调函数传递bytesRead和buffer,分别表示读取的字节数和缓冲区对象。
Node.js工具模块 -
OS模块
-
Path模块
-
Net模块
-
DNS模块
-
Domain模块
Node.js web模块
Client - 客户端,一般指浏览器,浏览器可以通过HTTP协议向服务器请求数据。
Server - 服务端,一般指Web服务器,可以接收客户端请求,并向客户端发送响应数据。
Business - 业务层, 通过Web服务器处理应用程序,如与数据库交互,逻辑运算,调用外部程序等。
Data - 数据层,一般由数据库组成。
服务器端代码执行之后 通过127.0.0.1/index.htm可以访问index.htm文件
浏览器通过url发起http请求,请求到127.0.0.1服务器,再通过js的文件解析和相应将文件发送到浏览器。
Node.js创建web客户端
服务器端和客户端代码一起使用cmd运行,之后会显示一个完整的请求与响应结果
Node.js express框架
可以设置中间件来响应HTTP请求。
定义了路由表用于执行不同的HTTP请求动作。
可以通过向模板传递参数来动态渲染HTML页面
安装express并且保存到依赖中
npm install express --save
express路由
express静态资源
get方法
Node.js多进程
Node.js使用事件驱动处理并发,每个子进程带有三个流对象child.stdin, child.stdout和child.stderr