从nodeJS中的请求获取mime类型

时间:2013-09-29 04:57:26

标签: node.js http-headers

我正在学习nodejs,但我遇到了障碍。我试图设置一个服务静态文件的简单服务器。我的问题是除非我明确地在url中输入扩展名,否则我无法获得文件扩展名。 httpheader 'content-type'以未定义的形式出现。 这是我的代码,非常简单:

var http = require("http"),
path = require("path"),
fs = require("fs");

var server = http.createServer(function(request, response){

console.log([path.extname(request.url), request.headers['content-type']]);
var fileName = path.basename(request.url) || "index.html",
    filePath = __dirname + '/public/' + fileName;
console.log(filePath);

fs.readFile( filePath, function(err,data){
    if (err) throw err
    response.end(data);
});


})
server.listen(3000)

有什么想法吗? 仅供参考我不想潜入connect或其他,我想知道在我放弃研究之前发生了什么事情并直接进入模块。

1 个答案:

答案 0 :(得分:1)

因此,静态Web服务器通常不会做任何深刻的魔术。例如,nginx在此处有一个小的mime类型文件扩展名映射:http://trac.nginx.org/nginx/browser/nginx/conf/mime.types

可能还有一些后备逻辑默认为html。您还可以使用file实用程序使用的文件“幻数”数据库来查看文件数据的开头并根据该数据进行猜测。

但这里没有魔力。这基本上是

  • 转到可用的文件扩展名
  • 可能会将文件内容的开头作为下一个选项
  • 使用默认的html,因为通常只有html资源的URL没有扩展名,而图像,css,js,字体,多媒体等几乎总是在URI中使用文件扩展名

另请注意,浏览器通常具有相当强大的检查集,即使Content-Type标头与实际响应正文数据不匹配,也会正确解释文件。