当发送从我的Node.js服务器脚本的浏览器,谷歌浏览器,我得到这样的警告:
资源解释为脚本,但与MIME类型文本/无格式传送
我Google'd四周,发现这是一个服务器端的问题,即,我想我应该设置正确的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的链接和这个节点模块我设法正确设置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.");
}
}
谷歌搜索的Content-Type HTTP头。
然后找出如何用它设置http://expressjs.com/api.html#res.set
哎呀,示例包括你的答案;)
只需选中结尾的文件,如果它的.js
,设置相应的MIME类型,使浏览器的快乐。
编辑:如果这是纯粹的节点上,没有明示,请看这里: http://nodejs.org/api/http.html#http_response_setheader_name_value
我一直在使用,因为其中没有定义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.");
}
}
mime.lookup()
现在改名为mime.getType()
所以,你可以这样做:
res.set('Content-Type', mime.getType('path/file'));
https://www.npmjs.com/package/mime