我已经添加了用于在节点服务器上提供图像的代码,但是在连接到Node时似乎不提供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);
当有人尝试实现自己的静态文件服务器而不是使用Express或有效的方法而无法使其工作时,我在Stack Overflow上看到了很多类似的问题。如果可以实现自己的静态文件服务器,请执行此操作。如果不能,那么这可能表明它不是一个好主意。 更新:请参阅以下内容,了解不使用Express的解决方案。
仅仅看一下您的代码,我已经看到了几个严重的问题,包括:
您的代码 不安全 -它允许任何人在您的系统上获取任何文件。
您的代码正在 阻止 -一旦获得任何并发连接,它将立即停止。
您的代码不适用于 二进制文件 -仅适用于文本文件,以及仅适用于UTF-8编码的文件
您的代码不适用于 大写文件名 ,.jpeg扩展名等。
.jpeg
您的代码无法正确提供 HTML 文件
当文件不存在而不是使用正确的代码响应时,代码 崩溃
回答这样的问题的人有两种选择:要么花费大量的精力和时间来解决上面提到的每个问题(这种情况很少发生,因为这不是一项琐碎的任务,这就是为什么您只看到评论中提到一个或一个问题的原因。其中两个问题而不是答案), 或者 您可以解释应如何正确完成任务,而不是对最初不是一个好主意的事情添加无数次修复。
话虽这么说,您可以通过安全高效的方法来实现目标的方法是将您的静态文件(HTML,CSS,图像等)放入一个目录,例如html并使用Express(或其他一些框架)如下所示),并带有以下简单代码:
html
var path = require('path'); var express = require('express'); var app = express(); var htmlPath = path.join(__dirname, 'html'); app.use(express.static(htmlPath)); var server = app.listen(80, function () { console.log('listening on port', server.address().port); });
查看完整的示例,并在GitHub上进行说明:
我将这个示例放在GitHub上是因为Stack Overflow上存在许多与人们在Node中提供静态文件有关的问题。它是开源的,您可以使其适应自己的需求并在代码中使用。
有关Express的更多信息,请参见:
您可以用来提供静态文件的其他框架包括:
如果您仍然不希望使用能够正确完成工作的高级框架,并且想推出自己的解决方案(可能出于教育目的), 它说明了如何通过以下方式提供静态图片:
express.static
express
connect
http
net
发布的所有示例均经过测试,可在节点版本4、5、6和7上运行。