node.js(三 --- stream 管道流 模組化 函式)
一、stream
stream是一個抽象的介面,node中有很多物件實現了這個介面。
stream有四種流型別: Readable: 可讀操作; Writable: 可寫操作; Duplex: 可讀可寫操作; Transform: 操作被寫入資料,然後都出結果;
所有的stream物件獨有EventsEmitter的例項,常用的事件有:
data: 當有資料可讀時觸發;
end: 沒有更多的資料可讀時觸發;
error: 在接收和寫入過程中發生錯誤時觸發;
finish: 所有資料已被寫入到底層系統時觸發;
1、從流中讀取資料
例如: var fs = require('fs');
var data = '';
var readerStream = fs.createReadStream('demo.txt'); //建立可讀的流
//開始執行讀取的事件
readerStream.on('data', function(chunk){
data += chunk;
})
readerSteam.on('end', function(){
console.log(data)
})
readerStream.on('error', function(err){
console.log(err.stack)
})
2、寫入流
例如:
var fs = require('fs');
var data = '要寫入的內容';
var writerStream = fs.creamWriteStream('demo.txt'); //寫入demo.txt 文件內
writeStream.write('data', 'UTF8'); //使用utf-8格式寫入資料;
writeStream.end(); //標記檔案末尾;
writeStream.on('finish', function(){
console.log('寫入完成');
})
writeStream.on('error', function(){
console.log(err.stack);
})
3、管道流
管道提供了一個從輸出流到輸入流的機制; 通常用於從一個流中回去資料,然後傳遞到另一個流中。
例如;
var fs = require('fs');
var readerStream = fs.creamReadStream('demo1.txt');
var writeSteam = fs.creamWriteStream('demo2.text');
readerStream.pip( writeStream);
4、鏈式流
鏈式是通過連線輸出流到另一個流並建立多個流操作鏈的機制。鏈式流一般用於管道操作。
例如:
var fs = require('fs');
var zlib = require('fs');
var readerStream = fs.createReadStream('demo1.txt');
readerStream.pip(zlib.createGzip()) //將檔案進行壓縮demo.txt.gz
.pip(fs.createWriteStream('demo1.txt.gz'))
fs.createReadStream('demo1.txt.gz').pip(zlib.createGunzio()) //將壓縮檔案進行解壓
.pip(fs.createWriteStream(demo.txt))
二、模組化
模組是node.js應用程式的基本組成部分,檔案和模組是一 一 對應的。 簡而言之,一個node.js檔案就是一個模組,這個檔案可能是javascript、json或者編譯過的c/c++擴充套件;
三、函式
node.js中的函式和javascript基本是一樣的,都存在匿名函式,函式存在引數,以及可以有回撥函式等等。