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....
    宫若石阅读 4,821评论 0 1
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 8,986评论 2 41
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,771评论 19 139
  • # 模块机制 node采用模块化结构,按照CommonJS规范定义和使用模块,模块与文件是一一对应关系,即加载一个...
    RichRand阅读 7,359评论 0 3
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    Myselfyan阅读 9,523评论 2 58