这是node.js / express.js / socket.io服务器的最小示例。除index.html
路径/
之外,它不应提供任何其他内容。
server.js:
var path = require('path');
var express = require('express');
var http = require('http');
var socketio = require('socket.io');
// create server
var app = express();
var server = http.createServer(app);
var io = socketio(server);
// set routes for express
app.get('/', function(req, res){
console.log('index.html is NOT served by static middleware');
res.sendFile(path.resolve(__dirname + '/../client/index.html'));
});
// start listening
server.listen(9000, function(){
console.log('listening on 9000');
});
我用node server.js
命令运行它。它成功地为index.html
提供了localhost:9000/
。
但是由于一些奇怪的原因,它也会从/socket.io/socket.io.js
目录中提供node_modules
,但不应该这样。{1}}为什么?这是我的index.html文件:
index.html
<!doctype html>
<html>
<head>
<title>Websocket + RabbitMQ + Express</title>
</head>
<body>
<script src="/socket.io/socket.io.js"></script>
<script src="client.js"></script>
<div id="messages"></div>
</body>
</html>
答案 0 :(得分:0)
如果是简单的话,如果你使用express,就不需要socket.io和http。请尝试使用以下代码来处理server.js:
var path = require('path');
var express = require('express');
var app = express();
app.get('/', function (req, res) {
console.log('index.html is NOT served by static middleware');
res.sendFile(path.resolve(__dirname + '/../client/index.html'));
});
app.listen(9000, function () {
console.log('Example app listening on port 9000!');
})
这样,只有客户端才能解析socket.io,而服务器只负责提供静态页面