1.nodejs的概念/优点二、简介一、nodejs的组成(1)引用需要的模块,可以使用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服务器收到一个请求后,就关闭当前的请求,自己玩,然后进行下一个请求。请求处理完成后,会被放入队列中,等待队列的开头。输出。这时候就会有一个主循环(事件循环)一直在监听事件。当事件被处理时,回调函数将被触发并返回到队列中。4.eventEmmitter类的核心:事件触发和事件监听函数的封装=require('events').EventEmitter;varevent=newEventEmitter();//层层事件监听,告诉服务端我准备开始监听这个叫做some_event的事件,on是用来绑定事件函数event的。on('some_event',function(){console.log('some_eventeventtrigger');});setTimeout(function(){event.emit('some_event');//打开监听器,事件被触发,execute是on之后的回调函数},1000);除了on和emit之外的一些其他属性(1)addListener(event,listener)在指定事件的监听器数组末尾添加一个监听器(2)once(event,listener)为指定事件注册一个监听器,只触发一监听,触发后立即释放监听(3)removeListener(event,listener)移除一个指定事件的监听器(必须已经注册监听器)5.缓冲区(buffer)因为js只有string数据类型,没有二进制数据类型,nodejs定义了一个Buffer类来创建一个专门用于存储二进制数据的缓冲区6.Stream(流)是一个抽象接口,是一种有序的、有方向的数据集合(?)。nodejs中有四种流类型(1)可读:可读(fs.createReadStream())(2)可写:可写(fs.createWriteStream())(3)duplex:可读可写(net.Socket)(4)transform:操作写入数据,然后读出(zlib.createDeflate())7.模块系统模块是一个节点。js应用程序的基本组成部分,文件和模块是一一对应的。nodejs提供了两个对象,exports和require,exports是模块对外暴露的接口,require用于从外部获取一个模块的接口。nodejs中有四种模块(原生模块和三种文件模块)优先级最高的是从文件模块缓存中加载,然后是从原生模块中加载,最后是从文件中加载8.httpservervarhttp=require("http");http.createServer(function(request,response){response.writeHead(200,{"Content-Type":"text/plain"});response.write("HelloWorld");响应。结束();})。听(8888);3。常用的API1。全局变量(1)_filename:当前执行脚本的文件名,输出为文件位置的绝对路径(2)_dirname:当前执行脚本所在目录(3)process:用于一个对象描述当前nodejs进程的状态,提供与操作系统的简单接口,以及Process的一些常用属性1)stdout/stderr/stdin:标准输出流、标准错误流和标准输入流2)argvargv属性返回一个数组,由命令决定执行脚本时每个参数的第一个成员总是node,第二个成员是脚本文件名,其余成员是脚本文件的参数。3)execPath:返回执行当前脚本的Node二进制文件的绝对路径4)env:返回一个对象,其成员是当前shell的环境变量5)config:一个包含javascript配置选项的对象,用于编译当前节点执行文件。它与运行./configure脚本生成的“config.gypi”文件相同。Process一些常用的方法1)chdir(directory):改变当前工作进程的目录,操作失败则抛出异常2)cwd():返回当前进程工作目录的目录3)nextTick(callback):一旦当前事件循环结束,调用回调函数2.常用工具-util模块(一)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)narrow异步模式下的语法拦截文件的格式(7)fs.unlink(path,callback)删除文件(8)fs.mkdir(path[,mode],callback)创建目录(9)fs.readdir(path,callback)读取directory(10)fs.rmdir(path,callback)删除目录4.其他知识1.GET/POST请求varhttp=require('http');varurl=require('url');varutil=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);varhttp=require('http');varquerystring=require('querystring');varutil=require('util');http.createServer(function(req,res){varpost='';//定义一个post变量,用于暂存请求体信息req.on('data',function(chunk){//通过req的数据事件监听函数,每当接收到请求体的数据,就会添加到post变量中post+=chunk;});req.on('end',function(){//结束事件触发后,通过querystring.parse将post解析成真正的POST请求格式,然后返回post给客户端=querystring.parse(post);res.end(util.inspect(post));});}).listen(3000);http.ServerRequest没有一个属性content作为requestbody,因为等待requestbody的传输可能是一个时间耗任务,恶意的POST请求会极大的消耗服务器的资源。所有的node.js默认不会解析请求体。当你需要它时,你可以手动完成。该程序的基本功能是提供网页信息浏览服务。常用的Web服务器有Apache、Nginx,IIShttp模块主要用于搭建HTTP服务器和客户端。要使用HTTP服务器或客户端功能,必须调用http模块
