【发布时间】:2015-10-03 01:24:40
【问题描述】:
我有一个现有的 web 项目,它的依赖项很少,例如
-
Materialize.css
-
lodash.js
-
script.js
-
style.css
等等……
我认为 socketIO 不能像这样加载文件:
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
问题是我想让我的应用程序与 socket.io 进行通信,但是当我启动服务器文件 (index.js) 时,我可以看到我的页面,但由于没有 css 和脚本而完全损坏。
我的 index.js 看起来像这样:
var http = require('http');
var fs = require('fs');
var server = http.createServer(function(req, res) {
fs.readFile('./index.html', 'utf-8', function(error, content) {
res.writeHead(200, {"Content-Type": "text/html"});
res.end(content);
});
});
var io = require('socket.io').listen(server);
io.sockets.on('connection', function (socket) {
console.log('Un client est connecté !');
socket.emit('message', 'Vous êtes bien connecté !');
});
server.listen(8080);
那么您知道如何告诉服务器注入我现有网站的所有资源吗?
【问题讨论】:
-
您可以包含一个巨大的 switch 案例或 if 语句来检测请求的资产并提供它,就像您对 index.html 所做的那样,但这不会很...枯燥或有趣或可重复使用。 Express 会使这更容易一些,但更好的选择是在您的应用程序前面使用 nginx 或 apache,以便您可以通过 apache/nginx 以及使用反向代理的节点服务器提供静态资产>,都在同一个端口下。
-
你知道你已经创建了一个网络服务器,无论从网络服务器请求什么资源,你都会发送
./index.html。您的 Web 服务器必须为您的站点所需的所有 Web 资源提供服务。当materialize.css被请求时,您的网络服务器需要提供它,以及您的网站请求的所有其他文件,例如socket.io.js文件。通常,不会像这样对静态资产文件进行硬编码。通常,您会设置一些通用基础架构来为静态资产提供服务。有很多方法可以做到这一点(Express.static、nginx、自定义代码等)。 -
是的,我想我误解了这部分。这不仅仅是我想要包含的 index.html,而是它的所有依赖项!
标签: javascript css node.js html socket.io