我已经添加了用于在节点服务器上提供图像的代码,但是在连接到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
扩展名等。
您的代码无法正确提供 HTML 文件
当文件不存在而不是使用正确的代码响应时,代码 崩溃
回答这样的问题的人有两种选择:要么花费大量的精力和时间来解决上面提到的每个问题(这种情况很少发生,因为这不是一项琐碎的任务,这就是为什么您只看到评论中提到一个或一个问题的原因。其中两个问题而不是答案),
或者 您可以解释应如何正确完成任务,而不是对最初不是一个好主意的事情添加无数次修复。
话虽这么说,您可以通过安全高效的方法来实现目标的方法是将您的静态文件(HTML,CSS,图像等)放入一个目录,例如html
并使用Express(或其他一些框架)如下所示),并带有以下简单代码:
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
内置的中间件,就像这个答案)express
(express
但没有express.static
)connect
(低于的一级express
)http
(使用Node的http
模块)net
(甚至不使用http
模块)发布的所有示例均经过测试,可在节点版本4、5、6和7上运行。
我一直在处理将一个站点从Apache迁移到Nginx的过程,我快要失去理智了。虚拟主机不想提供静态资源(css、js等),我似乎不知道为什么。服务器块看起来像这样: 我错过了什么?我知道这是因为我对Nginx缺乏经验,但任何建议都将不胜感激。 谢谢 更新 这似乎与我以前遇到麻烦的化名有关。如果我将我的文档根指向别名位置(),并尝试呈现没有别名的静态内容,它会呈现良好的效果。一旦我在网址中输入别名.
问题内容: 我正在使用,我的django应用的结构如下 的是 在我尝试使用它为: 但是它没有加载并给出错误 我跑去收集所有静态文件。 为什么要加载CSS文件?是否缺少任何配置? 请提出建议。 问题答案: 根据文档正确的方式来加载静态文件是 这会工作
我无法访问静态内容(angular app),甚至无法访问简单的索引。来自spring boot的html文件。我一直收到404错误。Spring没有为我提供这些静态文件。自从升级到Spring Boot 2.2.4后,我就遇到了这个问题。我必须升级以应对Zip64问题。 我的application.properties里有这样一句话: 我也有自己的staticResourceConfigurat
问题内容: 我无法让Spring-boot项目提供静态内容。 我已经放在一个命名的文件夹下。在其中,我有一个名为的文件夹。当我打包应用程序并运行它时,它找不到我放在该文件夹中的图像。 我试图把静态文件中,并但没有任何工程。 如果我我可以看到文件在正确文件夹的jar中:例如,但是调用:http://localhost:8080/images/head.png,我得到的只是一个404 有什么想法为什么
问题内容: 有一个in ,但是我似乎无法使express static选项起作用。我删除并完成了操作,但仍然无法正常工作。我刚收到404错误。 我添加了一个块以确保express正常运行,但是我仍然无法请求静态文件。 问题答案: 对我来说很好。 app.js 自述文件
问题内容: 我可以使用express提供静态HTML页面。我还安装了“ ejs”,以显示来自.js文件中局部变量的数据的页面。我只需要在页面一角显示一个小的徽标以及其余数据。在浏览器中仅打开html文件可以很好地加载图像,但是在服务器上,图像损坏了。我认为这可能与我的文件路径或目录结构有关。这是我原始的简单代码,没有徒劳的尝试: server.js index.html 我没有包括img src行