[解決済み] NodeJSで作る基本的な静的ファイルサーバー
2023-05-17 11:46:56
質問
私は、完璧なサーバーとしてよりも、nodeを理解するための練習として、nodejsで静的ファイルサーバーを作成しようとしています。私はConnectやnode-staticのようなプロジェクトをよく知っており、より生産的なコードのためにそれらのライブラリを使用することを完全に意図していますが、私はまた、私が働いているものの基本を理解したいのです。このことを念頭に置いて、私は小さなserver.jsをコード化しました。
var http = require('http'),
url = require('url'),
path = require('path'),
fs = require('fs');
var mimeTypes = {
"html": "text/html",
"jpeg": "image/jpeg",
"jpg": "image/jpeg",
"png": "image/png",
"js": "text/javascript",
"css": "text/css"};
http.createServer(function(req, res) {
var uri = url.parse(req.url).pathname;
var filename = path.join(process.cwd(), uri);
path.exists(filename, function(exists) {
if(!exists) {
console.log("not exists: " + filename);
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('404 Not Found\n');
res.end();
}
var mimeType = mimeTypes[path.extname(filename).split(".")[1]];
res.writeHead(200, mimeType);
var fileStream = fs.createReadStream(filename);
fileStream.pipe(res);
}); //end path.exists
}).listen(1337);
私の質問は2つあります。
-
これは、node で基本的な html などを作成しストリーミングするための正しい方法ですか、それとももっと良い、エレガントな、堅牢な方法がありますか?
-
nodeの.pipe()は、基本的に以下のことを行っているだけでしょうか?
.
var fileStream = fs.createReadStream(filename);
fileStream.on('data', function (data) {
res.write(data);
});
fileStream.on('end', function() {
res.end();
});
皆さん、ありがとうございます。
どのように解決するのですか?
-
あなたの基本的なサーバーはよく見えますが、例外があります。
には
return
ステートメントがありません。res.write('404 Not Found\n'); res.end(); return; // <- Don't forget to return here !!
そして
res.writeHead(200, mimeType);
であるべきです。
res.writeHead(200, {'Content-Type':mimeType});
-
はい
pipe()
は基本的にその通りですが、ソースストリームを一時停止/再開します (受信機の速度が遅い場合)。 以下はpipe()
関数のソースコードです。 https://github.com/joyent/node/blob/master/lib/stream.js
関連
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み] Preflightとredirectを使用したCORSリクエスト: 不許可になりました。回避策は?
-
[解決済み] npm package.jsonファイルのdependencies, devDependencies, peerDependenciesの違いは何ですか?
-
[解決済み] Node.jsでファイル/ディレクトリが存在するかどうかを同期的にチェックする
-
[解決済み] 基本的な「ロングポーリング」の実装方法を教えてください。
-
[解決済み] Node.js クイックファイルサーバ (静的ファイルオーバーHTTP)
-
[解決済み] PUT、DELETE、HEADなどのメソッドは、ほとんどのウェブブラウザで利用可能ですか?
-
[解決済み] ベーシック認証における「レルム」とは
-
[解決済み】全てのブラウザで、Webページのキャッシュを制御するには?
-
[解決済み] [Solved] リクエストに必須パラメータがない場合、どのようなHTTPステータスレスポンスコードを使用すればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] X-REQUEST-ID httpヘッダーとは何ですか?
-
[解決済み] Node.js クイックファイルサーバ (静的ファイルオーバーHTTP)
-
[解決済み] application/x-www-form-urlencoded or multipart/form-data?
-
[解決済み] [Solved] リクエストに必須パラメータがない場合、どのようなHTTPステータスレスポンスコードを使用すればよいですか?
-
[解決済み】ファイルから取得した投稿データでcURLにリクエストを送信する。
-
[解決済み】AngularでHTTPリクエストにURL引数(クエリ文字列)を渡すには?
-
[解決済み】CURL コマンドライン URL パラメータ
-
[解決済み】どのHTTPメソッドがどのCRUDメソッドと一致するか?
-
[解決済み】ユーザーエージェント文字列の大きさはどれくらいになりますか?
-
[解決済み] Cache-Control: privateとは何ですか?