美文网首页
node引入json 及node事件的入门

node引入json 及node事件的入门

作者: 招展君 | 来源:发表于2017-08-27 14:44 被阅读220次

    这时候突然想到一个问题

    有些文件夹下有大量的第三方引入和其他无需提取的文件。如果不对这些文件进行过滤,那么最后生成的文件树势必会有大量的无用路径。这时候需要做一个类似于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事件的入门

          本文链接:https://www.haomeiwen.com/subject/ylnbdxtx.html