node.js fs,http
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的更多相关文章
- 从官网学习Node.js FS模块方法速查
最新文档请查看仓库 https://github.com/wangduandu... 1. File System 所有文件操作提供同步和异步的两种方式,本笔记只记录异步的API 异步方式其最后一个参 ...
- Node.js FS模块方法速查
1. File System 所有文件操作提供同步和异步的两种方式,本笔记只记录异步的API 异步方式其最后一个参数是回调函数.回调函数的第一个参数往往是错误对象,如果没有发生参数,那么第一个参数可能 ...
- node.js & fs & file read & file write
node.js & fs & file read & file write https://nodejs.org/api/fs.html const fs = require( ...
- node.js fs.open 和 fs.write 读取文件和改写文件
Node.js的文件系统的Api //公共引用 var fs = require('fs'), path = require('path'); 1.读取文件readFile函数 //readFile( ...
- [node.js] fs.renameSync()报错
初学node.js,跟着node入门,操作了一遍.在最后一步,上传图片并显示时遇到报错 fs.js: throw err; ^ Error: ENOENT: no such file or direc ...
- Node.js——fs模块(文件系统),创建、删除目录(文件),读取写入文件流
/* 1. fs.stat 检测是文件还是目录(目录 文件是否存在) 2. fs.mkdir 创建目录 (创建之前先判断是否存在) 3. fs.writeFile 写入文件(文件不存在就创建,但不能创 ...
- node.js fs、http使用
学习node核心模块http.fs;的使用 首先在server.js文件中require两个模块http.fs; let fs = require('fs')let http = require (' ...
- Node.js fs文件系统模块
一.读取文件几个步骤 1.先引入fs文件系统模块 2.使用readfile 或 readFileSync 注意点:它们的回调函数有两个参数,第一个是err,第二个是data,得到的data是buffe ...
- Node.js——fs常用API
文件状态 文件删除 文件信息 读取文件夹 文件的截取 创建文件夹 删除目录 文件监视,可以设置监视频率 文件重命名,可以用来剪切文件 注意 fs.open() fs.close() 这是最原始的读写方 ...
随机推荐
- Python之路番外(第三篇):Pycharm的使用秘籍
版本:Pycharm2017.3.4Professional Edition 一.Pycharm的基本使用1.在Pycharm下为你的python项目配置python解释器 file --settin ...
- linux的!的用法
!的用法:1.!!:代表上一条命令,如下: 示例一: ./some-shell-command cat !! (相当于cat ./some-shell-command) 示例二: cd /user ! ...
- C语言基础第五次作业
题目7-2 统计一行文本的单词个数 1.实验代码 #include <stdio.h> int main() { char a; ,countword=; ){ scanf("% ...
- 导入mysql报错问题
今天数据导入报错:Got a packet bigger than‘max_allowed_packet’bytes的问题 2个解决方法: 1.临时修改:mysql>set global max ...
- 49.UILable宽度高度自适应
第一种: UILabel *labl = [[UILabel alloc]init]; labl.backgroundColor = [UIColor redColor]; labl.numberOf ...
- 从模板驱动文件ins生成cls文件
在当前目录下,启动cmd程序,输入以下指令: latex acmart.ins
- Latex表格插入
\begin{table}[h] \centering \caption{Traffic flows description} \begin{tabular}{|c||c|c|c|c|} \hline ...
- hadoop学习笔记-目录
以下是hadoop学习笔记的顺序: hadoop学习笔记(一):概念和组成 hadoop学习笔记(二):centos7三节点安装hadoop2.7.0 hadoop学习笔记(三):hdfs体系结构和读 ...
- C++STL 预定义函数对象和函数适配器
预定义函数对象和函数适配器 预定义函数对象基本概念:标准模板库STL提前定义了很多预定义函数对象,#include <functional> 必须包含. 1使用预定义函数对象: void ...
- s5-2 Cpu调度算法
调度程序采用什么算法选择一个进程(作业)? 如何评价调度算法的性能? 调度准则 CPU利用率 – 使CPU尽可能的忙碌 吞吐量 – 单位时间内运行完的进程数 周转时间 – 进程从提交到运行结束的全部时 ...
