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)
    })
}

你可能感兴趣的:(node引入json 及node事件的入门)