我想在node.js中编写一些代码,它使用url的扩展名来查找图像。例如,如果url的扩展名是.jpg,它将查找并响应.jpg文件。如果网址扩展名为.png或.svg,它将使用正确的文件类型提供相应的文件。如何为所有类型的图像提供服务?
这是我有:
var http = require('http');
var path = require('path');
var fs = require('fs');
var server = http.createServer(function(req, res) {
if(path.extname(req.url) == ".png" || path.extname(req.url) == ".gif" || path.extname(req.url) == ".svg") {
fs.readFile(path.basename(req.url), function(err, data) {
var extname = path.extname(req.url);
switch(extname) {
case ".png":
var ext = "image/png";
case ".svg":
var ext = "image/svg+xml";
case ".gif":
var ext = "image/gif";
}
res.writeHead(200, {'content-type':ext});
res.end(data);
console.log(ext);
});
}
});
server.listen(80);
这是因为当我看到标题,它没有使用正确的内容类型我发疯。我使用switch语句将正确的内容类型放入基于扩展名称的变量中。因此,如果扩展名是.png,它会将“image/png”放入一个名为ext的变量中。我将变量ext放在'content-type'后面的writeHead部分中:...
我是控制台日志变量“ext”,无论如何我都会得到“image/gif”。即使extname是.svg或.png。
在这一刻,如果我在我的服务器domain.com/picture.svg上查找文件并检查标题,它将显示:content-type:image/gif ..我的switch语句清楚地说明了路径。 extname(req.url)为“.svg”,则应将“image/svg + xml”放入变量ext。
我尝试了奇怪的事情,比如在变量“ext”周围加引号,它实际上显示我请求的.svg文件。即使标题看起来像这样:content-type:ext。
我很困惑,我需要一些帮助。
我的代码有什么问题? 如何仅使用node.js中的代码块显示.jpg .png .svg .gif?
没有明示或框架!我正在寻找一个纯粹的node.js解决方案。
@zvona - 这听起来像一个答案给我。 – adeneo 2014-09-04 20:20:36
@zvona,让你的评论一个答案。 – 2014-09-04 20:26:45
现在一切正常,谢谢。但我有个问题。我是控制台日志记录extnames,基本名称和switch语句生成的变量。 .gif和.png控制台日志没有问题,但.svg从不控制台记录任何东西。即使在标题中,我也可以看到content-type:ext。 Ext是变量。但gif和png正确显示:content-type:image/gif和content-type:image/png。我也在switch语句中添加了中断。 .svg的行为有什么不同? – user3658794 2014-09-04 20:36:08