[Nodejs] 多重階層のフォルダを一括で削除するスニペット

2022/01/11

テクノロジー

t f B! P L
eyecatch 最近、仕事でも自分用でも使っていたweb用フレームワークをPHPからNodejsに変更した、ユゲタです。 Nodejsって、Javascriptベースだから便利というわけではなく、おそらくサーバーサイドも、フロントサイドも、非同期も、理解していないと、 まったくもって、意味がわからない仕組みなのではないかと思います。 ReactやView.jsなどを使っている人は、慣れっこなのかもしれませんが、サーバーサイドのCGI系ばかりを使っている人からすると、 サーバー側処理とクライアント処理がごっちゃになって、しかも、どちらもJavascriptなんでワケワカメになってしまうんじゃないかな〜と・・・ ユゲタも、たまにごっちゃになっていしまうこともありますが、改めてしっかりと設計をしてプログラミングすれば、 そういう自体は大体回避出来ることも、最近覚えました。

階層がいくつもあるフォルダの削除が難しいんじゃ

そんな、Nodejs系フレームワークを自作している時に、サーバーに溜め込んだデータなどを一括で削除したいという場面があり、 ファイル操作はfsライブラリを使って行うのが、nodejsのセオリーなんですが、nodejsでは、下記のように書くことで、フォルダ削除できるようですが、この機能がまだまだ実験段階ということで、安定しないということと、下位バージョンによっては、エラーになってしまうので、安定したプログラムを書いてみたいと思いました。 fs.rmdir(dir, { recursive: true }); 参考 : https://qiita.com/qrusadorz/items/aa6ac6a6d6b3e7d458d5

ファイルを全て削除してからフォルダを削除する方法

Linuxコマンドの "rm -rf ***"というような、強制削除機能があっても良さそうなものですが、どうやら、デメリットを危惧するあまり、こうした機能を手軽に付けていないのではないかと想像できます。 でも、安全を確認した上でやりたくても出来ないということでは、システムとして成り立ちません。 ということで、強制削除するプログラムを書いてみました。 var fs = require('fs'); module.exports = function(path){ if(!path){ return { status : "error", message : "not designation path." }; } if(fs.existsSync(path) === false){ return { status : "error", message : "not exists. ("+ path +")" }; } // remove-all var counts = rmPaths(path); // return return { status : "ok", message : "directory removed.", count : counts }; }; function rmPaths(path){console.log(path); var counts = 0; switch(checkPathType(path)){ case "dir": let dir = path.replace(/\/$/g , ""); var lists = fs.readdirSync(path); for(let p of lists){ counts += rmPaths(dir +"/"+ p); } fs.rmdirSync(path); break; case "file": fs.unlinkSync(path); break; } counts++; return counts; } function checkPathType(path){ if(!fs.existsSync(path)){return;} return (fs.lstatSync(path).isDirectory()) ? "dir" : "file"; }; これを次のように使うと、恐らく想定した動作になるでしょう。 require("rm_all")(%削除したいフォルダ);

解説

基本的に一番古いfsのバージョンを使っても動作するように、コッテコテの書き方をしましたが、 要するに、上位階層でファイルをどんどん削除していって、フォルダにぶち当たった場合は、その中身を再帰的に処理するようにしています。 ユゲタのNodeフレームワークは、これで上手いこ動作して便利に使えています。 良かったら、使ってみてください。 npm登録して、配布してもいいかもですね。 え?もしかして、もうある?だったら、先に教えてよ〜〜〜!

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ