22

Google Chrome で Node.js サーバーからブラウザにスクリプトを送信すると、次の警告が表示されます。

リソースはスクリプトとして解釈されますが、MIME タイプ text/plain で転送されます

Google で検索したところ、サーバー側の問題であることがわかりました。つまり、送信する前に、正しい 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タイプを「設定」するのではなく、決定することしかできません。)

4

5 に答える 5

24

私はそれを考え出した!

@rdrey のリンクこのノード モジュールのおかげで、次のように応答の 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.");
    }
}
于 2012-08-15T15:42:04.183 に答える
6

GoogleでContent-TypeHTTPヘッダーを検索します。

次に、http://expressjs.com/api.html#res.setを使用して設定する方法を理解します

おっと、例にはあなたの答えが含まれています;)

ファイルの末尾を確認し、そうである場合.jsは、適切なMIMEタイプを設定して、ブラウザを満足させます。

編集:これがエクスプレスなしの純粋なノードである場合は、ここを見てください:http: //nodejs.org/api/http.html#http_response_setheader_name_value

于 2012-08-15T15:15:02.493 に答える