この要点を確認してください。ここでは参考のために複製していますが、要点は定期的に更新されています。
Node.JS静的ファイルWebサーバー。任意のディレクトリでサーバーを起動するパスにそれを置き、オプションのポート引数を取ります。
var http = require("http"),
url = require("url"),
path = require("path"),
fs = require("fs"),
port = process.argv[2] || 8888;
http.createServer(function(request, response) {
var uri = url.parse(request.url).pathname
, filename = path.join(process.cwd(), uri);
fs.exists(filename, function(exists) {
if(!exists) {
response.writeHead(404, {"Content-Type": "text/plain"});
response.write("404 Not Found\n");
response.end();
return;
}
if (fs.statSync(filename).isDirectory()) filename += '/index.html';
fs.readFile(filename, "binary", function(err, file) {
if(err) {
response.writeHead(500, {"Content-Type": "text/plain"});
response.write(err + "\n");
response.end();
return;
}
response.writeHead(200);
response.write(file, "binary");
response.end();
});
});
}).listen(parseInt(port, 10));
console.log("Static file server running at\n => http://localhost:" + port + "/\nCTRL + C to shutdown");
更新
gistはcssおよびjsファイルを処理します。自分で使ったことがあります。「バイナリ」モードで読み取り/書き込みを使用しても問題ありません。これは、ファイルがファイルライブラリによってテキストとして解釈されず、応答で返されるcontent-typeとは無関係であることを意味します。
コードの問題は、常に「text / plain」のコンテンツタイプを返すことです。上記のコードはcontent-typeを返しませんが、HTML、CSS、およびJSにそれを使用しているだけであれば、ブラウザーはそれらをうまく推測できます。どのコンテンツタイプも、間違ったコンテンツタイプに勝るものはありません。
通常、content-typeはWebサーバーの構成です。だから私は、これが解決しない場合はごめんなさい、あなたの問題は、それが簡単な開発サーバーとして私のために働いて、それはいくつかの他の人々を助けるかもしれないと思いました。応答で正しいコンテンツタイプが必要な場合は、joeytwiddleのようにそれらを明示的に定義するか、適切なデフォルトのあるConnectなどのライブラリを使用する必要があります。これの良い点は、シンプルで自己完結型(依存関係なし)であることです。
しかし、私はあなたの問題を感じています。だからここに結合されたソリューションがあります。
var http = require("http"),
url = require("url"),
path = require("path"),
fs = require("fs")
port = process.argv[2] || 8888;
http.createServer(function(request, response) {
var uri = url.parse(request.url).pathname
, filename = path.join(process.cwd(), uri);
var contentTypesByExtension = {
'.html': "text/html",
'.css': "text/css",
'.js': "text/javascript"
};
fs.exists(filename, function(exists) {
if(!exists) {
response.writeHead(404, {"Content-Type": "text/plain"});
response.write("404 Not Found\n");
response.end();
return;
}
if (fs.statSync(filename).isDirectory()) filename += '/index.html';
fs.readFile(filename, "binary", function(err, file) {
if(err) {
response.writeHead(500, {"Content-Type": "text/plain"});
response.write(err + "\n");
response.end();
return;
}
var headers = {};
var contentType = contentTypesByExtension[path.extname(filename)];
if (contentType) headers["Content-Type"] = contentType;
response.writeHead(200, headers);
response.write(file, "binary");
response.end();
});
});
}).listen(parseInt(port, 10));
console.log("Static file server running at\n => http://localhost:" + port + "/\nCTRL + C to shutdown");