Node.js
一、模块加载机制
1.路径
require('./2.js')//当前目录下的文件相对路径,必须写‘./’
require('2.js')//默认加载核心模块或者是node_modules
2.查找文件
文件名称 -> .js-> .json -> .node
3.引用模块中的对象exports
module.exports==exports 对象相等
二、global对象
1.以下属性不是全局的,而是模块作用域下的
__filename 返回当前文件的绝对路径
__dirnamr 返回当前文件所属目录的绝对路径
2.process 全局对象 ,对当前运行的程序的进程进行访问和控制
//stdin stdout 标准输入 输出流 //在"旧模式下"默认情况下,输入流是关闭的,要监听处理输入流的数据,首先要开启输入流 // process.stdin.resume(); var a,b; process.stdout.write('请输入a:'); //用于监听用户的输入数据 process.stdin.on('data',function(chunk){ if(!a){ a=Number(chunk); process.stdout.write('请输入b:'); }else{ b=Number(chunk); process.stdout.write('总和:'+(a+b)); } });
3.Buffer类 用于操作二进制数据流
//new Buffer(size); size[number] 创建一个buffer对象 //当我们为一个Buffer对象分配空间大小以后,其长度是固定,不能更改 var bf=new Buffer(2); var bf1=new Buffer([1,2,3]); //对象方法 var bf=new Buffer(5); bf.write(str,offset,lenth,encoding);//将参数str数据写入buffer bf.toString([encoding],[start],[end]);//返回一个解码的string类型 bf.toJSON();//返回一个JSon表示的Buffer实例 bf.slice([start],[end])//返回一个新的buffer,这个buffer将会和老的buffery引用相同的内存地址,修改这个新的buffer实例,也会改变原来的buffer bf.copy(targetBuffer,[targetStart],[sourceStart],[sourceEnd])//进行buffer的拷贝 //类方法 // Buffer.isEncoding('utf-8');//是否支持的编码格式 // Buffer.isBuffer(obj);//测试obj是否是一个Buffer // Buffer.byteLength(str,[encoding]);//返回这个字符串真实byte长度,encoding默认utf-8 // Buffer.concat(arrlist,[totalLength]);//拼接 arrlist是数组,totalLength中长度
4.FileSystem
var fs=require('fs'); 1.打开文件 open 异步 openSync 同步 /** * fs.open(path,flags,[mode],callback) * path:要打开的文件的路径 * flags:打开文件的方式 读/写 r/r+ * mode:设置文件的模式 读/写/执行 4/2/1 * callback:回调 * err:文件打开失败的错误保存在err里面,如果成功err为null * fd:被打开文件的标识 , */ 2.读取文件 read 异步 readSync 同步 /** * fs.read(fd,buffer,offset,length,position,callback) * fd:通过open方法成功打开文件返回的标识 * buffer:buffer对象 * offset:新的内容添加到buffer中的起始位置 * length:新的内容添加到buffer中的长度 * position:读取文件的起始位置 * callback:回调 * err: * len:新buffer对象的长度 * newBf:新buffer对象 * */ 2.写文件 write 异步 writeSync 同步 /** 打开文件的模式应该是读写 r+ * fs.write(fd,buffer,offset,length,position,callback) * fd:通过open方法成功打开文件返回的标识 * buffer:buffer对象,要写入的数据 * offset:buffer中写入数据起始位置 * length:buffer中写入数据的长度 * position:fd中的起始位置 * callback:回调 * err: * len:新buffer对象的长度 * newBf:新buffer对象 * fs.write(fd,data[,position[,encoding]],callback) * data为要写入的字符串 */ 3.关闭文件 close 异步 closeSync 同步 fs.close(fd,callback)
5.FileSystem
1.// 写入文件 writeFile异步 writeFileSync同步 /** * fs.writeFile(fielname,data,[options],callback) * * 将data数据写入一个文件,如果文件fielname不存在则新建,如果文件原先存在,会被替换 * data可以是string,也可以是一个原生buffer */ 2.// 追加内容 appendFile异步 appendFileSync同步 /** * fs.appendFile(fielname,data,[options],callback) * * 将data数据添加到一个文件fielname的尾部,如果文件fielname不存在则新建,如果文件原先存在,会被替换 * data可以是string,也可以是一个原生buffer */ 3.// 读取文件 readFile异步 readFileSync同步 // fs.readFile(fielname,[options],callback) 4.//检查指定路径的文件或者目录是否存在 exist // fs.exist(path,callback) 5.//删除文件 unlink // fs.unlink(path,callback) 6.//重命名 rename // fs.rename(oldpath,newpath,callback) 7.//读取文件信息 stat // fs.stat(path,callback) 8.//观察指定路径的改变 watch (不稳定) // fs.watch(fielname,[options],[listener]) 9.//创建文件夹 mkdir // fs.mkdir(path,[mode],callback) 10.//读取文件夹 readdir // fs.readdir(path,callback) 11.//删除文件夹 rmdir // fs.rmdir(path,callback)
6.HTTP
1.//加载一个http模块 var http=require('http'); 2.通过http模块下的createServer创建并返回一个web服务器对象 /** * var server=http.createServer([requestListener]); * requestListener:监听到客户端连接的回调函数(request事件) */ 3.监听客户端连接请求 /** * server.listen(port,[hostname],[backlog],[callback]); * 只有当调用了listen方法以后,服务器才开始工作 * port:监听的端口 * hostname:主机名 * backlog:连接等待队列的最大长度 * callback:调用listen方法并成功开启监听以后,会触发一个listening事件, callback将作为该事件的执行函数 */ 4.listening事件:当server调用listen方法并成功开始监听以后触发的事件 5.error事件:当服务开启失败的时候触发的事件 6.request事件:当有客户端发送请求到该主机和端口的请求的时候触发 -参数request:获取请求信息,比如头信息,数据等 httpVersion,headers,url,method -参数response:向该次请求的客户端输出返回响应 write(chunk,[encoding]):发送一个数据块到响应正文中 end(chunk,[encoding]):当所有的正文和头信息发送完成以后调用该方法告诉服务器数据已经全部发送完成,必须调用且在最后调用 statusCode:该属性设置返回的状态码 setHeader(name,value):设置返回头信息 writeHead(statusCode,[reasonPhrase],[headers]):这个方法只能在当前请求中使用一次,并且必须在response.end()之前调用
7.解析url
var url=require('url');
url.parse(path);//返回url对象
8.get post
//查询字符串 var querystring=require('querystring'); get:querystring.parse(str) post: post发送的数据会被写入缓冲区中,需要通过resquest的data事件和end事件来进行数据拼接处理