【发布时间】:2017-04-11 18:22:19
【问题描述】:
我已经添加了用于在我的节点服务器上提供图像的代码,但是在连接到 Node.js 时它似乎没有在 HTML 中提供图像。我也有正确提供的外部 CSS 和 JS。这是我在 Node 中的代码片段(见下文)。提前谢谢!
var server = http.createServer(function(req, res) {
var pathname = url.parse(req.url).pathname;
var ext = path.extname(pathname);
var handler = handlers[req.url];
if(ext) {
if(ext === ".css"){
res.writeHead(200, { "Content-Type" : "text/css" });
}
else if(ext === ".js") {
res.writeHead(200, { "Content-Type" : "text/javascript" });
}
else if(ext === ".jpg") {
res.writeHead(200, { "Content-Type" : "image/jpg" });
}
res.write(fs.readFileSync(__dirname + pathname, "utf8"));
res.end();
}
else if(handler) {
handler(req, res);
}
else {
res.writeHead(404, { "Content-type" : "text/plain" });
res.end();
}
});
server.listen(80);
【问题讨论】:
-
您可以在控制台中看到任何错误,例如 404?
-
it seems to not serve images- “似乎没有”与“没有”有很大不同...检查 浏览器 开发人员工具控制台或网络选项卡以查看是否 a) 发出请求,b) 来自服务器的实际响应是什么(状态和内容) -
这无关紧要,但你真的不应该只是盲目地根据用户输入从磁盘提供文件(有人可以请求
/../../../../../<some absolute path here with any extension>)。将所有公共文件放入您想要的任何层次结构中的某个目录中,但请确认最终 resolved 路径不在该基本公共目录之外。 -
我建议您添加一个
console.log(__dirname + pathname)并查看这是否是所需的文件名。另外,您不想使用utf8编码读取二进制文件,也不想使用同步I/O。可能想读这个How to serve an image using nodejs。 -
Aruna:不,我没有收到这样的错误,但我在 html 中看到的是在加载图像时。 JaromandaX:图片不提供,对不起我的语法,我会检查控制台和网络日志。 mscdex:好的,请注意。我刚开始学习这项技术。 jfriend00:我将删除代码中的 utf8,并为该目录和路径名生成控制台日志。
标签: javascript html node.js static-files