如何在Node.js中发送文件之前设置MIMEtypes?

在从我的Node.js服务器发送脚本到浏览器时,在Google Chrome中,我收到以下警告:

资源解释为脚本,但以MIMEtypestext / plain传输

我谷歌周围,发现这是一个服务器端的问题,即我认为我应该设置正确的MIMEtypes的东西,然后再发送。 这里是HTTP服务器的处理程序:

var handler = function(req, res) { url = convertURL(req.url); //I implemented "virtual directories", ignore this. if (okURL(url)) //If it isn't forbidden (eg 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."); } } 

问题: 如何纠正我的服务器端代码以正确configurationMIMEtypes?

(注:我已经find了https://github.com/broofa/node-mime ,但它只能让我确定MIMEtypes,而不是“设置”它。)

我想到了!

感谢@ rdrey的链接和这个节点模块,我设法正确地设置了响应的MIMEtypes,如下所示:

 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上searchContent-Type HTTP标头。

然后弄清楚如何使用http://expressjs.com/api.html#res.set进行设置

哎呀,这个例子包括你的答案;)

只需检查文件结尾,如果是.js ,则设置适当的MIMEtypes以使浏览器开心。

编辑:如果这是纯节点,没有expression,看看这里: 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'));