1. ホーム
  2. javascript

[解決済み] readFile()とreadFileSync()の違いについて

2023-06-08 19:18:23

質問

以下のコードは、index.htmlの内容(hello worldというテキストが含まれているだけ)をブラウザに出力しています。しかし readFile()readFileSync() を指定した場合、リクエストはタイムアウトします。

何が足りないのでしょうか?別の種類のバッファが必要なのでしょうか?私はnode 0.61とexpress 2.4を使用しています。

var express = require('express');
var fs = require('fs');

var app = express.createServer(express.logger());

app.get('/', function(request, response) {
    fs.readFile('index.html', function(err, data){
        response.send(data.toString());
    });
});

var port = process.env.PORT || 5000;
app.listen(port, function() {
  console.log("Listening on " + port);
});

どのように解決するのですか?

fs.readFile は、あなたが示したようにresponse.sendを呼び出すコールバックを取ります - 良い。 もし、これを単に fs.readFileSync と置き換えると、コールバックを取らないので、response.send を呼び出すコールバックは決して呼び出されず、したがって、レスポンスは決して終了せず、タイムアウトになることに注意する必要があります。

単にreadFileをreadFileSyncに置き換えていないのであれば、readFileSyncコードを表示する必要があります。

また、念のためですが、あなたは は決して を呼び出すべきではありません。なぜなら、I/O が実行されている間、シングルスレッド ループを拘束してしまうからです。 I/Oが完了し、コールバック処理コードが実行できるようになるまで、ノードループで他のリクエストを処理するようにします。