我正在尝试在node.js中编写一些代码,这些代码使用url的扩展名来查找图像。例如,如果网址的扩展名为.jpg,则会查找并回复.jpg文件。如果url扩展名为.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 的变量。在' content-type':...
之后,我将变量ext放在writeHead部分中我是控制台记录变量" ext "而我正在" image / gif"无论。即使extname是.svg或.png。
此时如果我在我的服务器domain.com/picture.svg上查找文件并检查标题,它将显示:content-type:image / gif ..我的switch语句清楚地说明了path.extname (req.url)是" .svg",然后" image / svg + xml"应该放在变量 ext 中。
我尝试了一些奇怪的事情,例如在变量周围加上引号" ext"它实际上显示了我请求的.svg文件。即使标题看起来像这样:content-type:ext。
我很困惑,我需要一些帮助。
我的代码出了什么问题? 如何仅使用node.js中的代码块显示.jpg .png .svg .gif?
没有表达或框架!我正在寻找一个纯node.js解决方案。
答案 0 :(得分:0)
在您的代码中,您似乎错过了" break"在每个案例中,以及为什么它一直评估到最后一个案例?请阅读以下原因:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch
示例:如果我忘了休息会怎么样?
如果您忘记了休息,那么脚本将从大小写开始运行 满足标准,并在此之后运行案例,无论如何 标准得到满足。
您的代码看起来应该更像:
var extname = path.extname(req.url);
var allowed = [".png", ".gif", ".svg"];
var ext = "";
if (!!~allowed.indexOf(extname)) {
fs.readFile(path.basename(req.url), function(err, data) {
switch(extname) {
case ".png":
ext = "image/png";
break;
case ".svg":
ext = "image/svg+xml";
break;
case ".gif":
ext = "image/gif";
break;
}
res.writeHead(200, {'content-type':ext});
res.end(data);
});
}