当您将其连接到服务器时,Socket.io会自动为其客户端javascript提供服务

时间:2016-01-14 12:33:36

标签: node.js express

这是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>

1 个答案:

答案 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,而服务器只负责提供静态页面