node.js 的stream(流)和模块系
2015-12-10 12:14
495 查看
//Stream (流)是一个抽象接口,Node中很多对象都实现了这个接口,For example: 对http 服务器发起请求的reques对象就是Stream,还有stdout(标准输出). //Node.js 的Stream有四种流类型:Readable---可读类型,Writeable--可写类型, Duplex---可读可写类型, Transform----操作被写入数据,然后读出结果。 //所有的stream对象都是EventEmitter的实例。常用的事件有:data----有数据可读是触发,end----没有更多数据可读时触发,error---在接收和写入过程发生错误时触发,finish---所有数据已被写入到底层系统时触发。 var fs = require('fs');//引入模块 var data = ''; //创建可读流 var readerStream = fs.createReadStream('soul.txt'); //设置编码为utf8 readerStream.setEncoding('UTF8'); //处理流事件--》data,end,error; readerStream.on('data',function(chunk){ data += chunk; console.log('readStream on one:'+chunk); }); //流读取完了执行 readerStream.on('end',function(){ console.log('data stream all:'+data); }); //流读取遇到错误 readerStream.on('error',function(err){ console.log(err.stack); }); //管道流实现复制 var writerStream = fs.createWriteStream('output.txt'); //管道读写操作用pipe方法, readerStream.pipe(writerStream);//读取solu.txt文件内容并且写入到output.txt文件中,如果找不到output文件则会创建一个output的新文件 //链式流 var zlib = require('zlib');//引入模块 fs.createReadStream('soul.txt').pipe(zlib.createGzip()).pipe(fs.createWriteStream('input.txt.gz'));//创建一个可读流然后写入到一个刚创建的流中然后再写入一个可写入的流中 console.log('压缩完成'); //解压文件,把input文件解压成input_copy fs.createReadStream('input.txt.gz').pipe(zlib.createGunzip()).pipe(fs.createWriteStream('input_copy.txt'));//获取可读流--》创建一个流存放读取到的流信息---》创建一个可写入的流写入流信息 console.log("compelete:"+JSON.stringify(fs.createReadStream('input.txt.gz'))); //node.js模块系统,如果有使用require.js的经历,对node.js模块系统理解就非常容易了,因为require的模块就是借鉴node的AMD写法的,一个模块一个文件,通过require方法获取其他模块 var hello = require('./hello');//获取hello模块,./是表示当前目录 hello.world(); //调用hello模块里面的world()方法; exports.world=function(){//exports是模块公开的接口,就是其他模块可以访问到的一个对象,可以把需要共享的方法封装到对象的属性里面去,这样就能实现对外共享了 console.log('Hello world'); } //有时候我们的模块是一些基本配置,只是想把配置封装到模块中,可以让其他模块直接访问到配置,不需要通过exports对象,方法如下: module.exports = function(){//setName.js代码 var name; this.setName = function(thyName){ name = thyName; } } var setName = require('seName');//引入模块 setName = new setName();//由于返回的是一个函数,所以需要实例化 setName('mao gui you');//执行setName方法 console.log(setName.name);//mao gui you //ps:require 加载优先级是:文件模块缓冲区>原生模块>文件模块,而且始终在文件模块缓冲区中加载模块,如果在缓冲区没有,则去加载原生模块或者载入文件模块然后缓存在缓冲区,然后再从缓冲区加载模块
相关文章推荐
- 使用 HTTP 上传 G 级的文件之 Node.js 版本
- Node.js压缩web项目中的js,css和图片
- 异步流程控制:7 行代码学会 co 模块
- node.js中的fs.mkdir方法使用说明
- 为什么Node.js会这么火呢?Node.js流行的原因
- 究竟什么是Node.js?Node.js有什么好处?
- node.js中的http.response.removeHeader方法使用说明
- 简单谈谈node.js 版本控制 nvm和 n
- 浅析Node.js查找字符串功能
- Node.js中require的工作原理浅析
- 运行Node.js的IIS扩展iisnode安装配置笔记
- 使用npm发布Node.JS程序包教程
- node.js中的fs.symlinkSync方法使用说明
- Node.js中的流(Stream)介绍
- 使用node.js 获取客户端信息代码分享
- Windows8下搭建Node.js开发环境教程
- Node.js实现的简易网页抓取功能示例
- node.js回调函数之阻塞调用与非阻塞调用
- Node.js中HTTP模块与事件模块详解
- node.js下LDAP查询实例分享