node文件读取和过滤、筛选(filter)

在node开发过程中,我们经常需要对文件进行读取,写入,以及文件的引入等相关操作和需求,那么我们就需要去读取我们的目录文件,并对其加以过滤,得到我们的目标文件,但是我们要怎么样高效率的进行文件的过滤呢,下面我们介绍了一种方法:
首先我们需要导入fs模块,然后用readdirSync列出文件

const fs = require('fs');
// 先导入fs模块,然后用readdirSync列出文件
// 这里可以用sync是因为启动时只运行一次,不存在性能问题:
var files = fs.readdirSync(__dirname + '/controllers');
// controllers可以根据自己项目的目录结构进行更改

然后用filter函数筛选出我们需要的目标文件
这里我们需要的是所有的js文件,我们也可以自己封装函数进行过滤,但是性能上不如底层封装好的函数,即便是自己写了,也要尽量把函数单独抽象出来一个组件,便于复用,减少冗余以及减少一些未知的错误;

// 过滤出.js文件:
var js_files = files.filter((f)=>{
    return f.endsWith('.js');
});

接下来就是对我们过滤出的文件进行符合自己需求的引入和使用
目录下有两个js文件是我们抽象出来的组件化函数,我们按照需要对这两个方法进行引入,js文件格式如下:

var fn_hello = async (ctx, next) => {
    var name = ctx.params.name;
    ctx.response.body = `<h1>Hello, ${name}!</h1>`;
};

module.exports = {
    'GET /hello/:name': fn_hello
};

找到满足条件的文件,并调用相关函数进行业务处理,我们这里就不展示业务处理函数的具体内容,只需要关注怎么对我们过滤出来的js文件进行使用;

// 处理每个js文件:
for (var f of js_files) {
    console.log(`process controller: ${f}...`);
    // 导入js文件:
    let mapping = require(__dirname + '/controllers/' + f);
    for (var url in mapping) {
        if (url.startsWith('GET ')) {
            // 如果url类似"GET xxx":
            var path = url.substring(4);
            router.get(path, mapping[url]);
            console.log(`register URL mapping: GET ${path}`);
        } else if (url.startsWith('POST ')) {
            // 如果url类似"POST xxx":
            var path = url.substring(5);
            router.post(path, mapping[url]);
            console.log(`register URL mapping: POST ${path}`);
        } else {
            // 无效的URL:
            console.log(`invalid URL: ${url}`);
        }
    }
}

到这里我们就基本了解了如何去读取文件,并且按照自己的需要进行过滤,以上过程仅仅是给刚接触或者不清楚怎么样过滤文件的同学提供一个思路,了解基本过程,具体的使用要结合自己的需求,又或者有更好的方式去实现,也需要大家多探索学习;

猜你喜欢

转载自blog.csdn.net/qq_34803821/article/details/84785093