NodeJs express.use扰乱了socket.io引用

时间:2015-01-24 15:44:13

标签: node.js express socket.io

我是nodejs和socket.io的新手。 我只是打算检测连接到快速服务器的套接字。 当我不使用快速服务器时,它对我来说很好。 然后由于某种原因我使用了express并希望一切都是静态的,所以我将这一行添加到服务器文件中。

 app.use(express.static(__dirname));

以上行扰乱了我的client.html文件。以下是我的client.html的代码。我使用开发者控制台调试它,发现脚本src包含" /socket.io/socket.io.js"无效。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="/socket.io/socket.io.js"></script>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="/css/style.css"/>
<title>Untitled Document</title>

<script>
var socket = io.connect();
socket.on('connect',function(){
    console.log("socket.io working");
});
</script>
</head>
</html>

我认为我缺少一些概念或事物。我已经尝试了很长时间,但可以找出问题所在。请指导。我会尝试自己。

有关详细信息:这是我的应用程序的目录结构。


-MyChatRoom

--ChatServer.js

--html
----client.html

--css
----style.css
--images

--node_modules
----socket.io
----express

编辑: 为了更好地理解这里是我的ChatServer.js代码

fs = require('fs');  
url = require('url');
express = require('express');
app = express();

server = require('http').createServer(app);
socketio = require('socket.io')(server);

//The root and all subs are made static
app.use(express.static(__dirname));

app.get('/',function(request,response){
    response.sendFile(__dirname + "/html/index.html");
});

app.listen(3000);

var connectedUsers = 0;

socketio.on('connection',function(socket){
    connectedUsers++;
    console.log('client connected');
});

1 个答案:

答案 0 :(得分:1)

app.listen(3000);

应该是

server.listen(3000);

您需要收听http模块,而不是快速模块。

实例化时,Express会通过http模块传递。 Socket.io使用http模块,这就是你需要监听它才能使它工作的原因。