こんにちは。ディレクターのエリカです。
こちらは、Node.jsという言葉を聞いて「何となくはわかるけど、実際にどんなものか触ったことがない」という初心者の方に向け、チュートリアル用モジュール「learnyounode」でエクササイズをしていくコーナーの第5回目です。
前回は、ファイルを非同期で読み取り、行数を出力する問題について紹介しましたが、今回はそれを非同期でおこないます。
Node.jsを勉強したいと思っている人のキッカケや第一歩になれば幸いです。それでは早速はじめていきましょう。
「learnyounode」のインストールがまだの方は、こちらからどうぞ。
あるディレクトリの中にあるファイルを、拡張子でフィルタリングして表示するプログラムを作成してください。
コマンド実行時には、ディレクトリへのパスが第一引数に、フィルタする拡張子が第二引数に与えられるものとします。
例えば、第二引数に「txt」が与えられた場合には、「.txt」で終わるファイルのみを表示する必要があります。
ファイルのリストは、ファイル名を一行毎に表示する形式にしてください。また、今回は非同期で処理をおこなってください。
fs.readdir()というメソッドが、第一引数にパスを、第二引数にコールバックをとります。
fs.readdir(path, callback)
非同期で行われるディレクトリ読み込みです。コールバックにはerrとfilesの二つの引数を与えます。filesには、対象ディレクトリの「.」と「..」を除くファイルが配列で格納されています。
また、pathモジュールのextnameメソッドが便利かもしれません。
var fs = require('fs') // fsモジュールを利用できるように var path = require('path') // pathモジュールを利用できるように // process.argv[2]には対象のディレクトリのパスが格納されています。 fs.readdir(process.argv[2], function (err, list) { list.forEach(function (file) { // process.argv[3]にはフィルタする拡張子が格納されています。 if (path.extname(file) === '.' + process.argv[3]) console.log(file) }) })
いかがでしたでしょうか。
これだけでも、応用すればいろいろと便利なものが作れそうな気がしませんか?
node.jsはWebサイトを作るだけのものではないのです。いろいろな作業を便利にできるんですね。
fsモジュールやpathモジュールもそうですが、次回は、そのモジュールを作ります。