node引入json 及node事件的入門

這時候突然想到一個問題

有些文件夾下有大量的第三方引入和其他無需提取的文件。如果不對這些文件進行過濾,那么最后生成的文件樹勢必會有大量的無用路徑。這時候需要做一個類似于gitIgnore功能的文件來進行相關配置。
這時候就要會node讀取json


node讀取json

node系統提供了require快捷引入json的方式。
也可以通過文件讀取的形式,可以參考這個鏈接來看,這個帖子里說到如果json中如果有BOM相關的東西需要額外進行處理,由于這里不會遇到這個問題,所以先暫不去研究~

node事件

由于需要代碼中會有大量的異步操作,除了非要用sync同步處理的API之外,在尋找更加推薦的異步處理辦法。
最不推薦的就是回調套回調這種寫法。
node中的事件系統可以很好的處理這個需求。可是文檔上的events 那塊依舊解釋的很爛。這時候參考了下這篇帖子熟悉了下node的事件系統。

代碼如下

const event = require('events').EventEmitter; //引入事件模塊
fs.readFile(item+'\\GPIgnore.json','utf8',function (err,data) {
      emitter.emit('aaa',data); //觸發事件
});
emitter.on('aaa',function (data) { //注冊事件
    console.log(data)
})

在這里,會做這么一個邏輯:如果一個文件夾路徑下有GPIgnore.json(generatePath)的時候,則認為該目錄是需要被讀取的,而如果路徑下沒有這個文件,則認為這個文件夾是不被讀取的。


這一階段結束之后的代碼如下

const path = require('path');
const fs = require('fs');
const event = require('events').EventEmitter;
//同步讀取所有的文件和文件夾
const  rootPathList = fs.readdirSync('./');
let rootFileList = [],
    rootDirList = [],
    realDirList = [];
getRootPathList();
generateFileTree();
function getRootPathList(){
    rootPathList.forEach(function (item, index) {
        let fsStats = fs.statSync(item);
        if(fsStats.isFile()){   //將文件和文件夾分類出來。
            rootFileList.push(item);
        }else if(fsStats.isDirectory()){
            rootDirList.push(item);
        }
    })
}

function generateFileTree(path){
    const emitter = new event();
    rootDirList.forEach(function (item) {
        //這里用同步的寫法而不用異步的
         try{
            file = fs.readFileSync(item+'\\GPIgnore.json','utf8');
        }catch (e){
            console.log(e)
        }


        fs.readFile(item+'\\GPIgnore.json','utf8',function (err,data) {  //讀取json配置文件
            if(err){    //這里要做這個判斷,沒有這個json的路徑不需要進行后續的處理。
            }else{
                realDirList.push(item);
                emitter.emit('haveGPIgnore',{
                    path:item,
                    data:JSON.parse(data)
                });
            }
        });
    })
    emitter.on('haveGPIgnore',function (data) {
        console.log(data)
    })
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宮若石閱讀 1,126評論 0 1
  • Node.js是目前非常火熱的技術,但是它的誕生經歷卻很奇特。 眾所周知,在Netscape設計出JavaScri...
    w_zhuan閱讀 3,641評論 2 41
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,973評論 19 139
  • # 模塊機制 node采用模塊化結構,按照CommonJS規范定義和使用模塊,模塊與文件是一一對應關系,即加載一個...
    RichRand閱讀 2,551評論 0 3
  • Node.js是目前非常火熱的技術,但是它的誕生經歷卻很奇特。 眾所周知,在Netscape設計出JavaScri...
    Myselfyan閱讀 4,101評論 2 58