-1

私はnodejsを学んでいますが、障害に遭遇しました。静的ファイルを提供する単純なサーバーをセットアップしようとしています。私の問題は、URL に拡張子を明示的に入力しない限り、ファイル拡張子を取得できないことです。はhttpheader 'content-type'undefined として入ります。これが私のコードです。かなり単純です:

var http = require("http"),
path = require("path"),
fs = require("fs");

var server = http.createServer(function(request, response){

console.log([path.extname(request.url), request.headers['content-type']]);
var fileName = path.basename(request.url) || "index.html",
    filePath = __dirname + '/public/' + fileName;
console.log(filePath);

fs.readFile( filePath, function(err,data){
    if (err) throw err
    response.end(data);
});


})
server.listen(3000)

何か案は?参考までに、飛び込みたいだけではありませんconnect。グラインドをやめてモジュールに直行する前に、何が起こっているのか知りたいのです。

4

1 に答える 1

1

そのため、静的 Web サーバーは通常、深い魔法を行いません。たとえば、nginx には、ファイル拡張子から MIME タイプへの小さなマッピングがあります: http://trac.nginx.org/nginx/browser/nginx/conf/mime.types

html にデフォルト設定されているフォールバック ロジックもある可能性があります。また、ファイルユーティリティで使用されるファイル「マジック ナンバー」のデータベースを使用して、ファイル データの先頭を調べ、それに基づいて推測することもできます。

しかし、ここには魔法はありません。それは基本的に

  • 利用可能な場合はファイル拡張子で移動します
  • 次のオプションとして、ファイルコンテンツの先頭まで行くかもしれません
  • 画像、css、js、フォント、マルチメディアなどはほとんどの場合、URI にファイル拡張子を使用しますが、通常は html リソースのみが拡張子のない URL を持つため、デフォルトの html を使用します。

また、ブラウザーには通常、Content-Type ヘッダーが実際の応答本文データと一致しない場合でも、ファイルを正しく解釈するかなり堅牢なチェック セットがあることに注意してください。

于 2013-10-01T06:55:27.783 に答える