なんでこれを書いたか
- Node.jsでサーバーを立てた後、やることはこれ
- ファイル読み込みをどうやってやるかのイメージをつかみたかったから
fsオブジェクトとは
- file system オブジェクト
- ファイルを扱うオブジェクトでHTMLファイルなど読み込める!
使い方
男は黙って、変数に読み込む
var fs = require('fs');
まずはこれだけ使えるようになればOK
fs.readFile( './hello.html', 'UTF-8', コールバック関数 );
- 第1引数にファイルパスを指定(例えば・・'./hello.html')
- 第2引数には'UTF-8'を指定(一旦はこういうもんだと思っておけばOK)
- 第3引数には、読み込み完了後の処理を行うコールバック関数をかく
コールバック関数
- コールバック関数は、このファイルの読み込みが完了したら、発動します!
- 仮にこのファイルが、読み込みに1時間を要する超膨大ファイルだったとしましょう
- 1時間後、コールバック関数が発動し、そのあとに書いてるソースコードはようやく読まれるようになります
例えるなら、お会計をしている人が財布を探していて、なかなか列が進まない・・
しかし
- そんなことしてたら、ずーっと待ちっぱなしで列に並ぶ気が失せる
- というか財布探すのに1時間もかけて、店員もずっと待ってるって・・・店としてどうなんだ!
というご意見がありましたので、、
お財布探している間、次の方どうぞ〜
- に変更しました
- お財布が見つかり次第、お会計(コールバック関数)に移らせていただきます。
- 探している間は、次のお客様(readFile以降の処理)からお会計させていただきます。
簡単なコード例
function doRequest(req, res) {
//hello.htmlを読み込もう!
fs.readFile('./hello.html', 'UTF-8',
// 読み込みが完了したら、コールバック関数が発動
function(err, data) {
res.writeHead(200, {'Content-Type': 'text/html'});
// 読み込んだファイル(data)を書き込む
res.write(data);
res.end();
});
console.log('readFileのファイル読み込みが完了するまで、お待ちください');
console.log('おや、このログを見ているということは、まだファイルの読み込みが完了していないようですね');
}
- hello.htmlのファイル読み込みがおそーーかった場合、コールバック関数は発動せずに、readFile関数の下にある、console.logが呼び出される
- ファイル読み込みが完了した時点で、コールバック関数が発動する
こっから脱線
- コールバック関数は、「非同期処理」になります
- つまり、割り込みができるということです!
- 財布見つかった時点で、最後尾に列びなおさなくても、お会計に割り込めるというイメージです
じゃあ、それって並列処理なんですか?
- 違います
- 並列処理は、複数の作業を同時に実施します。
- レジいっぱいあるから財布探している人が割り込んでくる心配はない。同時にお会計ができるということです