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 模块