Node.jsで、特にhtmlファイルを読み取るために、同期と非同期の両方を回避しようとしています。
要求ハンドラーで、使用している同期バージョンは次のとおりです。
var fs = require("fs");
var filename = "./index.html";
var buf = fs.readFileSync(filename, "utf8");
function start(resp) {
resp.writeHead(200, {"Content-type":"text/html"});
resp.write(buf);
resp.end();
}
exports.start=start;
編集:私はこのようなコードをリファクタリングしようとしました:
var fs = require("fs");
var filename = "./index.html";
function start (resp) {
resp.writeHead(200, {"Content-Type":"text/html"});
fs.readFile(filename, "utf8", function (err, data) {
if (err) throw err;
resp.write(data);
});
resp.end();
}
空白のページが表示されます。resp.write(data)の前にすべてのデータが読み取られるのを待つ必要があるためだと思います。
var fs = require("fs");
var filename = "./index.html";
function start(resp) {
resp.writeHead(200, {
"Content-Type": "text/html"
});
fs.readFile(filename, "utf8", function(err, data) {
if (err) throw err;
resp.write(data);
resp.end();
});
}
ファイルが存在するかどうかがわからないため、このバリアントの方が優れています。ファイルの内容を読み取れることが確実にわかっている場合は、正しいヘッダーを送信する必要があります。また、「。end()」で終了しないコードのブランチがある場合、ブラウザはそれらを取得するまで待機します。つまり、ブラウザは長時間待機します。
var fs = require("fs");
var filename = "./index.html";
function start(resp) {
fs.readFile(filename, "utf8", function(err, data) {
if (err) {
// may be filename does not exists?
resp.writeHead(404, {
'Content-Type' : 'text/html'
});
// log this error into browser
resp.write(err.toString());
resp.end();
} else {
resp.writeHead(200, {
"Content-Type": "text/html"
});
resp.write(data.toString());
resp.end();
}
});
}