NodeJs基础 Node 核心 Node核心:
NodeJs回调 回调函数:异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。 Node 使用了大量的回调函数,Node所有API都支持回调函数。未使用回调函数可能会产生阻塞。
阻塞: 1 2 3 4 var fs = require ("fs" );var data = fs.readFileSync('input.txt' );console.log (data .toString()); console.log ("程序执行结束!" );
非阻塞: 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("程序执行结束!" );
NodeJs事件 事件驱动程序。当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。这个模型非常高效可扩展性非常强,因为webserver一直接受请求而不等待任何读写操作。(这也被称之为非阻塞式IO或者事件驱动IO)
模块化
NodeJs 提供了两个命令,require 和 exports exports是模块中公开的接口,require用于从外部获取接口,其实可以通过如此获取到所需模块的一个对象。
模块的加载顺序 一)从文件模块缓存中加载:
尽管原生模块与文件模块的优先级不同,但是都会优先于从文件模块的缓存中加载已经存在的模块。
二)从原生模块加载:
原生模块的优先级仅次于文件模块缓存的优先级。 require 方法在解析文件名之后,优先检查模块是否在原生模块列表中。 以http模块为例,尽管在目录下存在一个 http/http.js/http.node/http.json 文件, require(“http”) 都不会从这些文件中加载,而是从原生模块中加载。 原生模块也有一个缓存区,同样也是优先从缓存区加载。 如果缓存区没有被加载过,则调用原生模块的加载方式进行加载和执行。
三)从文件加载:
当文件模块缓存中不存在,而且不是原生模块的时候, Node.js 会解析 require 方法传入的参数,并从文件系统中加载实际的文件, require方法接受以下几种参数的传递:
http、fs、path等,原生模块。
./mod或../mod,相对路径的文件模块。
/pathtomodule/mod,绝对路径的文件模块。
mod,非原生模块的文件模块。
NodeJs Buffer JS本身只有字符串类型,没有二进制数据类型。但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个Buffer类,该类用来创建一个专门存放二进制数据的缓存区。
NodeJs Stream Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。 例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出)。
Node.js,Stream 有四种流类型:
Readable - 可读操作。
Writable - 可写操作。
Duplex - 可读可写操作.
Transform - 操作被写入数据,然后读出结果。
所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:
data - 当有数据可读时触发。
end - 没有更多的数据可读时触发。
error - 在接收和写入过程中发生错误时触发。
finish - 所有数据已被写入到底层系统时触发。
NodeJs OS模块:(基本的系统操作函数)
os.tmpdir() 返回操作系统的默认临时文件夹。
os.endianness() 返回 CPU 的字节序,可能的是 “BE” 或 “LE”。
os.hostname() 返回操作系统的主机名。
os.type() 返回操作系统名
os.platform() 返回操作系统名
os.arch() 返回操作系统 CPU 架构,可能的值有 “x64”、”arm” 和 “ia32”。
os.release() 返回操作系统的发行版本。
os.uptime() 返回操作系统运行的时间,以秒为单位。
os.loadavg() 返回一个包含 1、5、15 分钟平均负载的数组。
os.totalmem() 返回系统内存总量,单位为字节。
os.freemem() 返回操作系统空闲内存量,单位是字节。
os.cpus() 返回一个对象数组,包含所安装的每个 CPU/内核的信息:型号、速度(单位 MHz)、时间(一个包含 user、nice、sys、idle 和 irq 所使用 CPU/内核毫秒数的对象)。
os.networkInterfaces() 获得网络接口列表。
NodeJs Path 模块:(提供了处理和转换文件路的工具)
path.normalize(p) 规范化路径,注意’..’ 和 ‘.’。
path.join([path1][, path2][, …]) 用于连接路径。该方法的主要用途在于,会正确使用当前系统的路径分隔符,Unix系统是”/“,Windows系统是”\”。
path.resolve([from …], to) 将 to 参数解析为绝对路径。
path.isAbsolute(path) 判断参数 path 是否是绝对路径。
path.relative(from, to) 用于将相对路径转为绝对路径。
path.dirname(p) 返回路径中代表文件夹的部分,同 Unix 的dirname 命令类似。
path.basename(p[, ext]) 返回路径中的最后一部分。同 Unix 命令 bashname 类似。
path.extname(p) 返回路径中文件的后缀名,即路径中最后一个’.’之后的部分。如果一个路径中并不包含’.’或该路径只包含一个’.’ 且这个’.’为路径的第一个字符,则此命令返回空字符串。
path.parse(pathString) 返回路径字符串的对象。
path.format(pathObject) 从对象中返回路径字符串,和 path.parse 相反。
其他 NodeJs Net 模块:(提供了用于底层的网络通信的小工具,包含了创建服务器/客户端的方法)
NodeJs DNS 模块:(用于解析域名)
NodeJs Express框架: 请求和响应: app.get(‘/‘, function (req, res) { // – })
Express 应用使用回调函数的参数: request和response对象来处理请求和响应的数据。
Request 对象: request对象表示 HTTP 请求,包含了请求查询字符串,参数,内容,HTTP 头部等属性。常见属性有:
Reponse 对象:
(1)res.app:同req.app一样
(2)res.append():追加指定HTTP头
(3)res.set(): 在res.append()后将重置之前设置的头
(4)res.cookie(name,value [,option]):设置Cookie
opition: domain / expires / httpOnly / maxAge / path / secure / signed
(5)res.clearCookie():清除Cookie
(6)res.download():传送指定路径的文件
(7)res.get():返回指定的HTTP头
(8)res.json():传送JSON响应
(9)res.jsonp():传送JSONP响应
(10)res.location():只设置响应的Location HTTP头,不设置状态码或者close response
(11)res.redirect():设置响应的Location HTTP头,并且设置状态码302
(12)res.send():传送HTTP响应
(13)res.sendFile(path [,options] [,fn]):
传送指定路径的文件 -会自动根据文件extension设定Content-Type
(14)res.set():设置HTTP头,传入object可以一次设置多个头
(15)res.status():设置HTTP状态码
(16)res.type():设置Content-Type的MIME类型