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. [ ZooKeeper]ZooKeeper 的功能和原理

    Zookeeper功能简介: ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现.分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅 ...

  2. putty中查询乱码问题

    我们在putty连接Linux时候,有时候查询会出现乱码问题...如下图 这个是因为putty中设置编码字符集的原因..将此换为utf8格式的即可解决 解决后查询如下:

  3. /bin/sh^M:bad interpreter:

    /bin/sh^M:bad interpreter: No such file or directory 这个错误发生在你在windows下编写文件上传到linux服务器去运行的时候. 错误原因:wi ...

  4. Ubuntu18.04网易云音乐双击运行

    18.04 之后发现无法运行网易云音乐,后发现必须给sudo权限还能运行,但是每次都打开终端sudo很麻烦.看网上很多人是修改什么什么文件,,,没仔细看. 我觉得,恩,,写行脚本,双击运行也可行且很方 ...

  5. Element ui 使用 Tree 树形控件

    使用树形控件需要映入 jsx才能运行链接:https://github.com/vuejs/babel-plugin-transform-vue-jsx#usage npm install\ babe ...

  6. 41.App 框架的搭建思路以及代码的规范

    本链接  引用别人文章https://www.jianshu.com/p/d553096914ff

  7. swift -inout关键字

    一般参数仅仅是在函数内可以改变的,当这个函数执行完后变量就会被销毁,不会有机会改变函数以外的变量,那么我们就会产生一个疑问,我们可不可以通过一个函数改变函数外面变量的值呢?答案是肯定的,这时我们就需要 ...

  8. IPython:一种交互式计算和开发环境(魔术命令,快捷键)

    %run命令 在IPython会话环境中,所有文件都可以通过%run命令当做Python程序来运行. 假设在ipython_script_test.py中存放了一段简单的脚本,如下所示: def f( ...

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

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

  10. java中的四种修饰符:private、protected、public和default的区别

      本类 本包 子类 包外 public 可以 可以 可以 可以 protected 可以 可以 可以 不可以 default 可以 可以 不可以 不可以 private 可以 不可以 不可以 不可以 ...