2012-08-15 6 views
12

Google Chromeで、私はこの警告を取得し、ブラウザに自分のNode.jsのサーバーからスクリプトを送信:Node.jsでファイルを送信する前にMIMEタイプを設定するにはどうすればよいですか?

リソーススクリプトとして解釈が、私は、MIMEタイプ text/plainの

で転送グーグルでは、サーバー側の問題であることを知りました。つまり、送信する前に正しいMIMEタイプを設定する必要があると思います。ここではHTTPサーバのハンドラがあります:

var handler = function(req, res) 
{ 
    url = convertURL(req.url); //I implemented "virtual directories", ignore this. 

    if (okURL(url)) //If it isn't forbidden (e.g. forbidden/passwd.txt) 
    { 
     fs.readFile (url, function(err, data) 
     { 
      if (err) 
      { 
       res.writeHead(404); 
       return res.end("File not found."); 
      } 

      //I think that I need something here. 
      res.writeHead(200); 
      res.end(data); 
     }); 
    } 
    else //The user is requesting an out-of-bounds file. 
    { 
     res.writeHead(403); 
     return res.end("Forbidden."); 
    } 
} 

質問:はどのように私が正しくMIMEタイプを設定するには、私のサーバー側のコードを修正しますか?

(注:私はすでにhttps://github.com/broofa/node-mimeを見つけたが、それは私だけがそれを "設定" するために、MIMEタイプを判断することができます)Content-Type HTTPヘッダーのための

答えて

15

が、私はそれを考え出しました!

@ rdreyのlinkのおかげとthis node module私が正しく、このように、レスポンスのMIMEタイプを設定するために管理:

function handler(req, res) { 
    var url = convertURL(req.url); 

    if (okURL(url)) { 
     fs.readFile(url, function(err, data) { 
      if (err) { 
       res.writeHead(404); 
       return res.end("File not found."); 
      } 

      res.setHeader("Content-Type", mime.lookup(url)); //Solution! 
      res.writeHead(200); 
      res.end(data); 
     }); 
    } else { 
     res.writeHead(403); 
     return res.end("Forbidden."); 
    } 
} 
6

検索グーグル。その後

http://expressjs.com/api.html#res.set

おっと、例では、あなたの答えを含んでそれを設定する方法を見つけ出す;)

単にそれは.jsだ場合は、ブラウザを幸せにするために、適切なMIMEタイプを設定し、終了ファイルを確認してください。

EDIT:これは明示せずに、純粋なノードである場合には、ここを見て:http://nodejs.org/api/http.html#http_response_setheader_name_value

+0

うん、純粋なノード、エクスプレス。 – corazza

+1

OK、欠落しているのは、各応答の正しいヘッダーにポップするスクリプトのMIMEタイプを把握するためだけです。 – rdrey

+0

それを済ませ、私の答えを見てください。 :) – corazza

0

は、私はあなたのハンドラ関数を使用して問題を抱えていたので、convertURLと定義されていないokURL機能。私は少しのコードを修正し、今mime.getType()に名前が変更され、この

function handler(req, res) 
{ 
    // /home/juan/Documentos/push-api-demo is the path of the root directory of the server 
    var url    = '/home/juan/Documentos/push-api-demo' + req.url; 
    var file_exists  = fs.existsSync(url); 

    if (file_exists) 
    { 
     fs.readFile(url, function(err, data) 
     { 
      if (err) 
      { 
       res.writeHead(404); 
       return res.end("File not found."); 
      } 

      res.setHeader("Content-Type", mime.lookup(url)); 
      res.writeHead(200); 
      res.end(data); 
     }); 
    } 
    else 
    { 
     res.writeHead(403); 
     return res.end("Forbidden."); 
    } 
} 
0

mime.lookup()のように見える終えました。 このようにすることができます:

res.set('Content-Type', mime.getType('path/file')); 
関連する問題