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() 这是最原始的读写方 ...
随机推荐
- Spring Environment(二)源码分析
Spring Environment(二)源码分析 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring Envi ...
- Java JMX 监管
Java JMX 监管 JSR 规范系列目录(https://www.cnblogs.com/binarylei/p/10348178.html) JMX(Java Management Extens ...
- GC收集器种类
转载:https://wangkang007.gitbooks.io/jvm/content/la_ji_shou_ji_qi.html 收集器 1.1 Serial(串行)收集器 Serial收集器 ...
- 【Linux】ApacheBench(ab)压力测试工具
AB的简介 ab是apachebench命令的缩写. ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试.比 ...
- GUI的最终选择Tkinter模块初级篇
一.Tkinter模块的基本使用 1)实例化窗口程序 import tkinter as tk app = tk.Tk() app.title("FishC Demo") app. ...
- tp5系统核心设计提供了一些可能会需要的钩子(位置)
钩子 描述 参数 app_init 应用初始化标签位 无 app_begin 应用开始标签位 当前调度信息 module_init 模块初始化标签位 当前请求对象实例 action_begin ...
- react native底部tab栏切换
1.安装tab栏插件 npm i react-native-tab-navigator --save 2.引入对应的组件和tab插件 import { Platform, StyleSheet, Te ...
- mongodb知识积累
1: 安装mongodb https://www.cnblogs.com/zhangdaicong/p/7492494.html 2:配置文件 vi /etc/mongodb.conf https:/ ...
- 范围for循环(c++11)
1.概念 1)c++11新标准下用范围for循环来遍历序列 2)使用范围for循环时,如果要修改序列中的元素,则必须把循环变量定义成引用类型: int main() { string s = &quo ...
- base64编码理解
原文地址:http://www.ruanyifeng.com/blog/2008/06/base64.html 所谓Base64,就是说选出64个字符----小写字母a-z.大写字母A-Z.数字0-9 ...