node檔案讀取和過濾、篩選(filter)
阿新 • • 發佈:2018-12-20
在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}`);
}
}
}
到這裡我們就基本瞭解瞭如何去讀取檔案,並且按照自己的需要進行過濾,以上過程僅僅是給剛接觸或者不清楚怎麼樣過濾檔案的同學提供一個思路,瞭解基本過程,具體的使用要結合自己的需求,又或者有更好的方式去實現,也需要大家多探索學習;