-1

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

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研究或其他,我想在我放弃研究并直接进入模块之前知道发生了什么。

4

1 回答 1

1

所以静态网络服务器通常不会做任何深奥的魔法。例如,nginx 在这里有一个文件扩展名到 mime 类型的小映射:http: //trac.nginx.org/nginx/browser/nginx/conf/mime.types

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

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

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

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

于 2013-10-01T06:55:27.783 回答