cor*_*zza 20 javascript browser webserver node.js
从我的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.");
}
}
Run Code Online (Sandbox Code Playgroud)
问题:如何更正服务器端代码以正确配置MIME类型?
(注意:我已经找到https://github.com/broofa/node-mime,但它只允许我确定MIME类型,而不是"设置"它.)
cor*_*zza 20
我想到了!
感谢@ 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.");
}
}
Run Code Online (Sandbox Code Playgroud)
在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'));
Run Code Online (Sandbox Code Playgroud)
https://www.npmjs.com/package/mime
| 归档时间: |
|
| 查看次数: |
24907 次 |
| 最近记录: |