error:
EventEmitter定义了一个特殊的时间error,它包含了‘错误’的语义,当error被发射时,EventEmitter规定如果没有
响应的监听器,Node.js会把它当做异常,退出程序并打印调用栈,一般我们要为会发射error事件的对象设置监听器,
避免遇到错误后整个程序崩溃。 /*
*author:e路相扶
*filename error.js
*/
var events=require('events');
var emitter=new events.EventEmitter();
emitter.emit('error'); 大多数时候,我们不会直接使用EventEmitter,而是在对象中继承它,包括fs,net,http在内的只要是支持事件
响应的核心模块都是EventEmitter的子类
because:
.具有某个实体功能的对象实现事件符合语义,时间的监听和发射应该是一个对象的方法
.javascript的对象机制是基于原型的,支持部分多重继承,继承EventEmitter不会打乱对象原有的继承关系 file system :fs
fs模块时文件操作的封装,提供了对文件的读取,写入,更名,删除,遍历目录,链接等POSIX文件系统操作 fs.readFile(filename,[encoding],[callback(err,data)])异步读取文件
err表示错误,data解析后是字符串,否则以buffer形式表示二进制数据
/*
*author:e路相扶
*filename read.js
*/
var fs=requier('fs');
fs.readFile('zj.txt','utf-8',function(err,data)){
if(err){
console.log(err);
}else{
console.log(data);
}
}) fs.readFileSync(filename,[encoding])同步读取try{..}catch(){..}捕捉异常 fs.open(path,flags,[mode],[callback(err,fd)]) 打开文件
flags:r,r+,w,w+,a,a+
mode:指定文件权限
fs.read(fd,buffer,offset,length,position,[callback(err,bytesRead,buffer)]) POSIX read函数封装
offeset:是buffer的写入偏移量
length:文件中读取的字节数
position:文件读取的起始位置,如果为null,则从当前文件指针的位置读取
bytesRead:读取的字节数
buffer:缓冲区对象 /*
*author:e路相扶
*filename read2.js
*/
var fs=require('fs');
fs.open('zj.txt',r,function(err,fd){
if(err){
console.error(err);
return;
}
var buf=new Buffer();
fs.read(fd,buf,,,null,function(err,bytesRead,buffer){
if(err){
console.error(err);
return;
}
console.log('bytesRead '+bytesRead);
console.log(buffer);
});
});

 HTTP服务器和客户端
Node.js提供了http模块,其中封装了一个高效的HTTP服务器和一个简易的HTTP客户端
http.Server是一个基于事件的HTTP服务器,核心是由Node.js下层C++部分实现,接口是由Javascript封装。
http.request是HTTP客户端工具用于向HTTP服务器发送请求 HTTP服务器 /*
*author:e路相扶
*filename app.js
*/
var http=require('http');
http.createServer(function(req,res){
res.writeHead(,{'Content-Type':'text/html'});
res.write('<h1>Node.js</h1>');
res.end('<p>Hello world</p>');
}).listen();
console.log('HTTP server is listening at port 3000'); http.createServer创建http.Server实例,请求对象req,响应对象res,响应代码200表示请求成功。 http.Server提供了几个事件:
request:当客户请求到来时,该事件被触发,提供了两个参数req,res分别是http.ServerRequset,
http.ServerResponse 表示请求和响应信息
connection:当TCP连接建立,该事件被触发,提供了一个参数socket,为net.socket实例
connection事件的粒度要大于request,因为客户端在Keep-Alive模式下可能在同一个连接内发送多次请求
close:当服务器关闭时,事件被触发 /*
*author:e路相扶
*filename httpserver.js
*/
var server=new http.Server();
server.on('request',function(req,res){
res.writeHead(,{'Content-Type':'text/html'});
res.write('<h1>Node.js</h1>');
res.end('<p>Hello world</p>');
}).listen(); http.ServerRequest是HTTP请求的信息,是后端开发者最关注的内容 HTTP请求一般分为:请求头(Request Header)请求体(Request Body)
http.ServerRequest提供了三个事件用于控制请求体传输
data:请求数据到来之后该事件被触发,事件提供了一个参数chunk,表示接收到的数据,如果该事件没有被监听
那么请求体将会被抛弃 (可能会被多次调用)
end:当请求体数据传输完成时,事件被触发,此后不再有数据到来
close:用户当前请求结束,该事件被触发,不同于end,用户强制终止传输,也还是调用close 获取GET请求内容
/*
*author:e路相扶
*filename httpserverrequestget.js
*/
var http=require('http');
var url=require('url');
var util=require('util');
http.createServer(function(req,res){
res.write(,{'Content-Type':'text/plain'});
res.end(util.inspect(url.parse(req.url,true)));
}).listen(); 访问http://127.0.0.1:3000/user?name=zj&email=zhangjun516@126.com
output:
{search:'?name=zj&email=zhangjun516@126.com',
query:{name:'zj',email:'zhangjun516@126.com'},//GET请求的内容
pathname:'/user',
path:'/user?name=zj&email=zhangjun516@126.com',
href:'/user?name=zj&email=zhangjun516@126.com'
} 获取Post请求内容
/*
*author:e路相扶
*filename httpserverrequestpost.js
*/
var http=require('http');
var querystring=require('querystring');
var util=require('util'); http.createServer(function(req,res){
var post='';
req.on('data',function(chunk){
post+=chunk;
});
req.on('end',function(){
post=querystring.parse(post);
res.end(util.inspect(post));
})
}).listen(); 这个仅仅是例子,真实情况中的要复杂 http.ServerResponse 返回给客户端的信息,决定了用户最终能看到的结果
response.writeHead(statusCode,[headers])向请求的客户端发送响应头
response.write(data,[encoding])向请求的客户端发送响应内容(在response.end之前,可以多次调用)
response.end([data],[encoding])响应结束,告知客户端所有的发送已经完成,如果不调用改函数,客户端将处于等待状态 HTTP客户端
http模块提供了两个函数http.request和http.get,功能是作为客户端向HTTP服务器发起请求。
http.request(option,callback) 发起HTTP请求,option=》关联数组 参数:
host:请求网站的域名或IP地址
port:请求网站的端口,默认80
method:请求方法,默认GET
path:请求的相对于根的路径
headers:一个关联数组对象,为请求头的内容
callback:传递一个参数,为http.ClientResponse实例 http.request返回一个http.ClientRequest的实例 /*
*author:e路相扶
*filename httprequest.js
*/
var http=require('http');
var querystring=require('querystring'); var contents=querystring.stringify({
name:'zj',
email:'zhangjun516@126.com',
});
var oprionts={
host:127.0.0.1,
path:/var/www/post.php,
method:'POST',
headers:{
'Content-Type':'application/x-www-form-urlencoded',
'Content-Length':'contents.length'
}
};
var req=http.request(options,function(res){
res.setEncoding('utf8');
res.on('data',function(data){
console.log(data);
});
});
req.write(contents);
req.end();

 Notice:不要忘记写req.end(),不然服务器接收不到信息

 http.get(options,callback)是http.request的简化版,唯一的区别就是http.get自动将请求的方法设为Get请求
同时不需要调用req.end(); /*
*author:e路相扶
*filename httpget.js
*/
var http=require('http');
http.get({host:'127.0.0.1'},function(res){
res.setEncoding('utf8');
res.on('data',function(data){
console.log(data);
});
}); http.ClientRequest 是由http.request或http.get返回产生的对象 表示一个已经产生而且正在进行中的HTTP请求
/*
*author:e路相扶
*filename httpresponse.js
*/
var http=require('http');
var req=http.get({host:'127.0.0.1'});
req.on('response',function(res){
res.setEncoding('utf8');
res.on('data',function(data){
console.log(data);
});
});
http.ClientRequest 像http.ServerResponse一样提供了write和end函数,用于服务器发送请求体,通常用于post
put等操作,所有写操作结束以后必须调用end函数以通知服务器,否则请求无效。 request.abort():终止正在发送的请求
requset.setTimeout(timeout,[callback])设置请求超时时间,timetout(毫秒数) and so on http.ClientResponse
response.setEncoding([encoding]):设置默认的编码当data事件被触发时,数据将会以encoding编码,
默认值是null,记不编码,以buffer形式存储,
response.pause():暂停接收数据和发送事件,方便下载功能
response.resume():从暂停的状态中恢复


node.js fs,http的更多相关文章

  1. 从官网学习Node.js FS模块方法速查

    最新文档请查看仓库 https://github.com/wangduandu... 1. File System 所有文件操作提供同步和异步的两种方式,本笔记只记录异步的API 异步方式其最后一个参 ...

  2. Node.js FS模块方法速查

    1. File System 所有文件操作提供同步和异步的两种方式,本笔记只记录异步的API 异步方式其最后一个参数是回调函数.回调函数的第一个参数往往是错误对象,如果没有发生参数,那么第一个参数可能 ...

  3. node.js & fs & file read & file write

    node.js & fs & file read & file write https://nodejs.org/api/fs.html const fs = require( ...

  4. node.js fs.open 和 fs.write 读取文件和改写文件

    Node.js的文件系统的Api //公共引用 var fs = require('fs'), path = require('path'); 1.读取文件readFile函数 //readFile( ...

  5. [node.js] fs.renameSync()报错

    初学node.js,跟着node入门,操作了一遍.在最后一步,上传图片并显示时遇到报错 fs.js: throw err; ^ Error: ENOENT: no such file or direc ...

  6. Node.js——fs模块(文件系统),创建、删除目录(文件),读取写入文件流

    /* 1. fs.stat 检测是文件还是目录(目录 文件是否存在) 2. fs.mkdir 创建目录 (创建之前先判断是否存在) 3. fs.writeFile 写入文件(文件不存在就创建,但不能创 ...

  7. node.js fs、http使用

    学习node核心模块http.fs;的使用 首先在server.js文件中require两个模块http.fs; let fs = require('fs')let http = require (' ...

  8. Node.js fs文件系统模块

    一.读取文件几个步骤 1.先引入fs文件系统模块 2.使用readfile 或 readFileSync 注意点:它们的回调函数有两个参数,第一个是err,第二个是data,得到的data是buffe ...

  9. Node.js——fs常用API

    文件状态 文件删除 文件信息 读取文件夹 文件的截取 创建文件夹 删除目录 文件监视,可以设置监视频率 文件重命名,可以用来剪切文件 注意 fs.open() fs.close() 这是最原始的读写方 ...

随机推荐

  1. 更精确的判断对象类型js方法

    function isArray(o) { return Object.prototype.toString.call(o) === '[object Array]'; } function isRe ...

  2. git学习笔记:一台电脑上配置两个git账户

    如何在一台电脑上配置两个git账户,现在云端仓库很多,有开源中国的 gitee.com 微软的 github.com 还有 gitlab.com 和 bitbucket.org 等等,下面是具体步骤 ...

  3. 20155312 张竞予 2006-2007-2 《Java程序设计》第四周学习总结

    20155312 2006-2007-2 <Java程序设计>第四周学习总结 课堂笔记 Ctrl+shift+T调出三个窗口,分别是"vi编写代码","jav ...

  4. eclipse安装提要

    svn 插件安装http://subclipse.tigris.org/update_1.12.x教程地址http://jingyan.baidu.com/article/f71d60376b4c57 ...

  5. 在python中while

    一.While循环 1.while循环格式 while 条件 : while循环体 当条件为Ture时,执行循环体,直到条件是假,停止循环. count = 1 # count 计数 一般用于计数 w ...

  6. 数据分析报告格式zz

    分析报告的输出是是你整个分析过程的成果,是评定一个产品.一个运营事件的定性结论,很可能是产品决策的参考依据,既然这么重要那当然要写好它了. 我认为一份好的分析报告,有以下一些要点: 首先,要有一个好的 ...

  7. Python学习杂记

    Python中关键字yield有什么作用? 首先得理解generators,而理解generators前还要理解iterables: 你可以用在for...in...语句中的都是可迭代的:比如list ...

  8. 2018.10.26 poj3421X-factor Chains(数论+排列组合)

    传送门 排列组合入门题. 令X=p1a1p2a2..pkakX=p_1^{a_1}p_2^{a_2}..p_k^{a_k}X=p1a1​​p2a2​​..pkak​​ 那么答案1就等于∑i=1kai\ ...

  9. [zhuan]SQLServer查询最近一天,三天,一周,一月,一季度方法

    三天 select * from T_news where datediff(day,addtime,getdate())<= 2 and datediff(day,addtime,getdat ...

  10. 牛客训练六:海啸(二维树状数组+vector函数的使用)

    题目链接:传送门 思路: 二维树状数组, vector(first,last)函数中assign函数相当于将first中的函数清空,然后将last中的值赋值给first. 参考文章:传送门 #incl ...