1.nodejs的概念/好处
2.简单介绍
1.nodejs的组成
(1)引用required模块,可以用require指令来载入Node.js模块
(2)创建服务器,可以监听客户端的请求
(3)接收请求与响应请求,客户端可使用浏览器或者终端发送http请求,服务器接收请求后返回响应数据
2.创建应用
创建应用时首先使用require指令载入http模块,然后使用http.createServer()方法创建服务器
3.回调函数
nodejs的异步编程主要体现在回调上,node使用了大量的回调函数,所有的API都支持回调。
Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。
Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。
Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。
Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数
使用的是事件驱动模型,就是说一个web server接收到请求之后,当前的请求就被关闭,自己玩自己的,然后去进行下一个请求,这个请求处理完之后,会被放入队列之中,等队列排到最开始再输出,这个时候会有一个主循环(event loop)一直在监听着事件,当事件被处理完就会触发回调函数,返回队列中
4.eventEmmitter类
核心:事件触发与事件监听器功能的封装
var EventEmitter = require('events').EventEmitter;
var event = new EventEmitter();
// 逐层事件监听器,告诉服务器,我要开始准备监听这个叫some_event的事件了,on用于绑定事件函数
event.on('some_event', function() {
console.log('some_event 事件触发');
});
setTimeout(function() {
event.emit('some_event');
// 开启监听器,事件被触发,执行的是on后面的那个回调函数
}, 1000);
除了on和emit之外的一些别的属性
(1)addListener(event, listener)为指定事件添加一个监听器到监听器数组的尾部
(2)once(event, listener)为指定事件注册一个单次监听器,只触发一次监听,触发后监听器会立刻被解除
(3)removeListener(event, listener)移除指定事件的某个监听器(必须已被注册过的监听器)
5.Buffer(缓冲区)
因为js只有字符串数据类型,没有二进制数据类型,所以在处理流这种必须用到二进制数据的时候,nodejs定义了一个Buffer类,用来创建一个专门存放二进制数据的缓存区
6.Stream(流)
流式一个抽象接口,是有序而且有方向的数据集合(?),nodejs里面有四种流类型
(1)readable:可读(fs.createReadStream())
(2)writable:可写(fs.createWriteStream())
(3)duplex:可读可写(net.Socket)
(4)transform:操作被写入数据,然后读出数据(zlib.createDeflate())
7.模块系统
模块是node.js应用程序的基本组成部分,文件和模块是一一对应的
nodejs提供了exports和require两个对象,exports是模块公开的接口,require用于从外部获取一个模块的接口
nodejs存在四类模块(原生模块以及三种文件模块)
优先级最高的是从文件模块缓存中加载,然后是从原生模块加载,最后才是从文件中加载
8.http服务器
var http = require("http");
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(8888);
3.常用的API
1.全局变量
(1)_filename:当前正在执行的脚本的文件名,输出的是文件所在位置的绝对路径
(2)_dirname:当前执行脚本所在的目录
(3)process:用于描述当前nodejs进程状态的对象,提供与操作系统的简单接口,
Process一些常用的属性
1)stdout/stderr/stdin:标准输出流,标准错误流以及标准输入流
2)argvargv 属性返回一个数组,由命令行执行脚本时的各个参数组成。它的第一个成员总是node,第二个成员是脚本文件名,其余成员是脚本文件的参数。
3)execPath:返回执行当前脚本的Node二进制文件的绝对路径
4)env:返回一个对象,成员为当前shell的环境变量
5)config:一个包含用来编译当前 node 执行文件的 javascript 配置选项的对象。它与运行 ./configure 脚本生成的 "config.gypi" 文件相同
process一些常用方法
1)chdir(directory):改变当前工作进程的目录,如果操作失败抛出异常
2)cwd():返回当前进程的工作目录
3)nextTick(callback):一旦当前事件循环结束,调用回调函数
2.常用工具——util模块
(1)util.inherits(constructor, superConstructor)是一个实现对象间原型继承 的函数,只继承原型中定义的函数,而不会继承构造函数中创造的属性
(2)util.inspect(object,[showHidden],[depth],[colors])是一个将任意对象转换 为字符串的方法
3.文件系统(fs)
文件系统的方法中均有同步和异步两个版本,异步的方法函数最后一个参数是回调函数,回调函数的第一个参数包含了错误信息,建议用异步,因为性能更高,速度更快,而且没有阻塞。
(1)fs.open(path,flags,[,mode], callback):异步模式下打开文件的语法格式
path - 文件的路径。
flags - 文件打开的行为,指定文件的读写。
mode - 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。
callback - 回调函数,带有两个参数如:callback(err, fd)。
(2)fs.stat(path, callback):异步模式下获取文件信息的语法格式
(3)fs.writeFile(filename, data[, options], callback),异步模式下写入文件
(4)fs.read(fd, buffer, offset, length, position, callback)异步模式下读取文件的语法格式
(5)fs.close(fd, callback)
(6)fs.ftruncate(fd, len, callback)异步模式狭隘截取文件的语法格式
(7)fs.unlink(path, callback)删除文件
(8)fs.mkdir(path[, mode], callback)创建目录
(9)fs.readdir(path, callback)读取目录
(10)fs.rmdir(path, callback)删除目录
4.其他知识
1.GET/POST请求
var http = require('http');
var url = require('url');
var util = require('util');
http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(util.inspect(url.parse(req.url, true))); // parse函数提供了get请求的参数解析方法
}).listen(3000);
var http = require('http');
var querystring = require('querystring');
var util = require('util');
http.createServer(function(req, res){
var post = ''; //定义了一个post变量,用于暂存请求体的信息
req.on('data', function(chunk){ //通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中
post += chunk;
});
req.on('end', function(){ //在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。
post = querystring.parse(post);
res.end(util.inspect(post));
});
}).listen(3000);
http.ServerRequest并没有一个属性内容为请求体,原因是等待请求体传输可能是一件耗时的工作,恶意的POST请求会大大消耗服务器的资源,所有node.js默认是不会解析请求体的, 当你需要的时候,手动来做
2.web模块
web服务器指的是驻留在因特网上某种类型计算机的程序,基本功能是提供web信息浏览服务。常用的web服务器是Apache,Nginx,IIS
http 模块主要用于搭建 HTTP 服务端和客户端,使用 HTTP 服务器或客户端功能必须调用 http 模块
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。