Node.jsサーバーからブラウザにスクリプトを送信すると、Google Chromeで次の警告が表示されます。
リソースはスクリプトとして解釈されますが、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タイプを特定するだけで、「設定」することはできません。)
私はそれを考え出した!
@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.");
}
}
GoogleでContent-Type HTTPヘッダーを検索します。
次に、それを http://expressjs.com/api.html#res.set で設定する方法を理解します
おっと、例にはあなたの答えが含まれています;)
ファイルの末尾を確認するだけです。.js
の場合は、適切なMIMEタイプを設定してブラウザを満足させます。
編集:これがエクスプレスなしの純粋なノードの場合、ここを見てください: http://nodejs.org/api/http.html#http_response_setheader_name_value
mime.lookup()
はmime.getType()
に名前が変更されました。だからあなたはこのようにすることができます:
res.set('Content-Type', mime.getType('path/file'));
ConvertURL関数とokURL関数が定義されていないため、ハンドラー関数の使用に問題がありました。コードを少し変更して、このように仕上げました
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.");
}
}