四羡藐、node(二)

node模塊

文件模塊
內(nèi)置模塊
第三方模塊

內(nèi)置模塊

util

util.inherits(Child,Parent)
繼承胡桨,原理es6的繼承方法:Object.setPrototypeOf(Child.prototype,Parent.prototype);只繼承公有方法

var util = require('util');
util.inherits();
Buffer

Buffer詳解
Buffer是global上的屬性迈勋,為全局對象

常用全局屬性: setTimeout setInterval process setImmediate console Buffer 形參(exports,require,module,__dirname , __filename)
Buffer展現(xiàn)給我們的是16進制,utf8一個漢字 代表3個字節(jié)指煎,一個字節(jié)由八個位組成Bit

  • buffer創(chuàng)建
    三種方式(固定大小): 長度創(chuàng)建 字符串創(chuàng)建 數(shù)組創(chuàng)建
    var buffer = new Buffer(6)//6個字節(jié)
    buffer.fill(257);//257對256取模
    console.log(buffer);//<Buffer 01 01 01 01 01 01 >//6字節(jié) 沒有fill則隨機

var buffer = new Buffer('開心');
console.log(buffer);//

var buffer = new Buffer([100,120,16]);
console.log(buffer);//<Buffer 64 78 f0>

var buffer = new Buffer([0xfe,0xff,0x16]);
console.log(buffer);//<Buffer fe ff 16>

  • buffer里存儲的是內(nèi)存地址
    buffer類似于數(shù)組:
var obj = {name:1};
var arr = [obj,1,2];
var newArr = arr.slice(0); 
obj.name = 2;
console.log(newArr);//[{name:2},1,2]

buffer:存儲的都是內(nèi)存地址

var buffer = new Buffer([1,2,3]);
var newBuffer = buffer.slice(0,1);
newBuffer[0]=2;
console.log(buffer)//<Buffer 02 02 03>
  • buffer的write方法
    //參數(shù):string,往里面寫的字符串 offset,偏移量 length,寫入的長度 encoding 默認(rèn)是utf8
    var buffer = new Buffer(12);
    buffer.write('珠峰',0,6);
    buffer.write('培訓(xùn)',6,6);
    console.log(buffer.toString())//珠峰培訓(xùn)

buffer.forEach(function (item){
console.log(item)//得到的是十進制
});

  • buffer的copy方法 將小buffer拷貝到大buffer
    //參數(shù):targetBuffer,目標(biāo)buffer targetStart,目標(biāo)的開始 sourceStart,源的開始
    var buffer = new Buffer(12);
    var buf1 = new Buffer('珠峰');
    var buf2 = new Buffer('培訓(xùn)');
    buf1.copy(buffer,0);
    buf2.copy(buffer,6);
    console.log(buffer.toString());//

  • Buffer的concat方法
    //參數(shù):list,totalLength
    var buf1 = new Buffer('珠峰');
    var buf2 = new Buffer('培訓(xùn)');
    console.log(Buffer.concat([buf1,buf2],1000).toString);//長度1000,多的補零
    原理是利用copy方法,下面我們自己模擬一個concat方法:

//1.判斷長度是否傳遞便斥,如果給了長度就構(gòu)建一個buffer,將小buffer依次拷貝到大buffer上至壤,過長則將多余的部分 截取掉slice()截取有效長度
//2.手動維護長度 在構(gòu)建buffer,將小buffer依次拷貝到大buffer上 copy

Buffer.myConcat = function (list,totalLength) {
    //1.判斷長度是否傳遞
    if(typeof totalLength == "undefined"){
        totalLength = 0;
        list.forEach(function (item) {
            totalLength += item.length;
        });
    }
    var buffer = new Buffer(totalLength);//1000
    var index = 0;
    list.forEach(function (item) {
        item.copy(buffer,index);
        index+= item.length;
    });
    return buffer.slice(0,index);
};
console.log(Buffer.concat([buf1,buf2,buf1,buf2]).toString());
進制轉(zhuǎn)換
  • parseInt 任意進制轉(zhuǎn)10進制
parseInt('11100011',2);//
  • toString 任意進制轉(zhuǎn)任意進制
(0x16).toString(10);//16轉(zhuǎn)10枢纠,結(jié)果26
  • base64
    base64不是一個加密算法像街,加密:md5 sha1 sha256
  • 漢字轉(zhuǎn)base64 '珠' => 54+g 38=>64
    2進制裝換成10進制不得大于64,得到的結(jié)果在可見編碼中取值
    base64轉(zhuǎn)換原理代碼:
//將漢字轉(zhuǎn)換成2進制
var buffer = new Buffer('珠');
console.log(buffer); //0xe7 0x8f 0xa0
console.log((0xe7).toString(2)); //11100111
console.log((0x8f).toString(2)); //10001111
console.log((0xa0).toString(2)); //10100000

//將2進制轉(zhuǎn)換成10進制
console.log(parseInt('00111001',2)); //57
console.log(parseInt('00111000',2)); //56
console.log(parseInt('00111110',2)); //62
console.log(parseInt('00100000',2)); //32

//查找
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
str+= 'abcdefghijklmnopqrstuvwxyz';
str+='0123456789';
str+='+/';
console.log(str[57]+str[56]+str[62]+str[32]);//54+g

fs模塊 file system

十組常用的fs模塊方法
readFileSync readFile
writeFile writeFileSync
appendFile appendFileSync
path.resolve() path.join() 給一個相對路徑 解析一個絕對路徑
mkdirSync mkdir 創(chuàng)建目錄
rmdirSync rmdir 刪除目錄
unlinkSync unlink 刪除文件
readdirSync readdir 讀取目錄
existsSync exists 是否存在
statSync stat 判斷文件狀態(tài)

const fs = require('fs');
能用異步絕不用同步
fs.readFileSync

讀取文件不存在會報錯
讀取默認(rèn)格式是buffer類型 相當(dāng)于encoding:null

  • readFileSync 同步讀取
    var result = fs.readFileSync('./1.txt,'utf8')
  • readFile 異步讀取
    fs.readFile('./1.txt,'utf8',function(error,data){
    if(error)console.log(error);
    console.log(data);
    });
    解決異步問題:
var school = {}; 
fs.readFile('./name.txt','utf8',function (e,data) { //error-first
    if(e)console.log(e);
    school.name = data;
    out();
});
fs.readFile('./age.txt','utf8',function (e,data) { //error-first
    if(e)console.log(e);
    school.age = data;
    out();
});
function out() {
    if(Object.keys(school).length == 2){
        console.log(school); //{name:'珠峰培訓(xùn)',age:8}
    }
}
  • write
    1如果寫的文件不存在,會創(chuàng)建文件
    2默認(rèn)寫入的格式是utf8
    3文件有內(nèi)容晋渺,原來的內(nèi)容會被覆蓋
fs.writeFileSync('./a.txt',new Buffer('珠峰'));//寫入的是'珠峰',因為默認(rèn)是utf8格式镰绎,會默認(rèn)toString('utf8')
  • write async
fs.writeFile('./a.txt',new Buffer('珠峰'),function(err){});

不覆蓋寫入2中方法:

 fs.appendfile(target,data,,function (err) {})
 fs.writeFile(target,data,{encoding:'utf8',flag:'a'},function (err) {});
  • path.resolve path.join
var path  = require('path');
console.log(path.resolve('1.js'));//以當(dāng)前路徑解析出一個相對路徑
console.log(path.join(__dirname,'1.js'));//相當(dāng)于resolve
  • 兩個函數(shù)模擬:copy copyAsync
function copy(source,target) {//異步
    //先讀在寫
    fs.readFile(source,function (err,data) {
        if(err)console.log(err);
        //appendFile可以進行累加,不清空內(nèi)容寫入
        fs.writeFile(target,data,{encoding:'utf8',flag:'a'},function (err) {
            if(err)console.log(err);
            console.log('拷貝成功');
        });
    });
}
copy('./name.txt','./name1.txt');

function copySync(source,target) { //同步
    var result = fs.readFileSync(source);
    fs.writeFileSync(target,result);
}
copySync('./name.txt','./name1.txt');
  • mkdirSync和mkdir
    創(chuàng)建目錄
    函數(shù)模擬些举,內(nèi)置的方法不能一次創(chuàng)建多級目錄跟狱,
    函數(shù)模擬:同步創(chuàng)建文件夾
function makepSync(p) {
    var arr = p.split('/'); 
    for(var i = 0;i<arr.length;i++){
        var path = arr.slice(0,i+1).join('/');
        if(!fs.existsSync(path)){//exists兩個值true false
            fs.mkdirSync(path)
        }
    }
}
makep('a/b/c/d/e/f')

函數(shù)模擬:異步創(chuàng)建文件夾

//寫一個異步創(chuàng)建  mkdir + exists
//遞歸   mkdir + exists  插入排序
function makep(p) {
    var paths = p.split('/');
    var index = 1;
    function makeOne(subpath) {
        if(paths.length == index-1){
            return;
        }
        fs.exists(subpath,function (flag) {
            var temp = paths.slice(0,++index).join('/');
            if(!flag){ //不存在的時候創(chuàng)建
                fs.mkdir(subpath,function () {
                    makeOne(temp);// a/b
                });
            }else{ //存在的時候繼續(xù)下一次
                makeOne(temp);
            }
        });
    }
    makeOne(paths[index-1]);
}
makep('a/b/c/d/e/f');
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市户魏,隨后出現(xiàn)的幾起案子驶臊,更是在濱河造成了極大的恐慌挪挤,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件关翎,死亡現(xiàn)場離奇詭異扛门,居然都是意外死亡,警方通過查閱死者的電腦和手機纵寝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門论寨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人爽茴,你說我怎么就攤上這事葬凳。” “怎么了室奏?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵火焰,是天一觀的道長。 經(jīng)常有香客問我胧沫,道長昌简,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任绒怨,我火速辦了婚禮纯赎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘南蹂。我一直安慰自己犬金,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布六剥。 她就那樣靜靜地躺著佑附,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仗考。 梳的紋絲不亂的頭發(fā)上音同,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音秃嗜,去河邊找鬼权均。 笑死,一個胖子當(dāng)著我的面吹牛锅锨,可吹牛的內(nèi)容都是我干的叽赊。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼必搞,長吁一口氣:“原來是場噩夢啊……” “哼必指!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恕洲,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤塔橡,失蹤者是張志新(化名)和其女友劉穎梅割,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體葛家,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡户辞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了癞谒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片底燎。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖弹砚,靈堂內(nèi)的尸體忽然破棺而出双仍,到底是詐尸還是另有隱情,我是刑警寧澤桌吃,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布殊校,位于F島的核電站,受9級特大地震影響读存,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呕屎,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一让簿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秀睛,春花似錦尔当、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至田盈,卻和暖如春畜号,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背允瞧。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工简软, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人述暂。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓痹升,卻偏偏與公主長得像,于是被迫代替她去往敵國和親畦韭。 傳聞我的和親對象是個殘疾皇子疼蛾,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Node.js 常用工具 util 是一個Node.js 核心模塊,提供常用函數(shù)的集合艺配,用于彌補核心JavaScr...
    FTOLsXD閱讀 536評論 0 2
  • 個人入門學(xué)習(xí)用筆記察郁、不過多作為參考依據(jù)衍慎。如有錯誤歡迎斧正 目錄 簡書好像不支持錨點、復(fù)制搜索(反正也是寫給我自己看...
    kirito_song閱讀 2,479評論 1 37
  • 一、核心模塊和對象 核心模塊的意義 常用內(nèi)置模塊path:處理文件路徑fs:操作文件系統(tǒng)child_process...
    EndEvent閱讀 4,422評論 0 1
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,340評論 0 6
  • Node.js是目前非沉圮剑火熱的技術(shù)眷柔,但是它的誕生經(jīng)歷卻很奇特。 眾所周知原朝,在Netscape設(shè)計出JavaScri...
    w_zhuan閱讀 3,617評論 2 41