2015-01-24 2 views
0

Я новичок в nodejs и socket.io. Я просто намерен обнаружить сокет, подключенный к экспресс-серверу. Он работал отлично для меня, когда я не использовал экспресс-сервер. Тогда по какой-то причине я использовал выражение и хотел, чтобы все было статическим, поэтому я добавил эту строку в файл сервера.NodeJs express.use беспокоит ссылку socket.io

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'); 
}); 
+0

Вы также можете разместить свой код ChatServer.js. Необходимо увидеть, какой узел пытается запустить тоже. Кроме того, размещение html/css в общей папке и назначение этого статическому будет лучше начать. 'app.use (express.static (__ dirname + '/ public'));' – haxtbh

+0

hey haxtbh Я отредактировал вопрос и добавил код ChatServer.js для вашей легкости –

+0

Пожалуйста, оставьте переменную connectedUsers. Он больше не используется. –

ответ

1

app.listen(3000);

должен быть

server.listen(3000);

Вам нужно прослушать модуль http, а не экспресс.

Экспресс передается через модуль http при его создании. Socket.io использует http-модуль, поэтому вам нужно слушать это, чтобы заставить его работать.

+0

Этот ответ немного вводит в заблуждение. Вы можете сделать «var app = express(); var server = app.listen (3000); 'для запуска вашего веб-сервера, а затем' var io = require ('socket.io'). listen (server); 'для запуска socket.io. Таким образом, вам не нужно напрямую использовать http-модуль, поскольку экспресс-менеджмент это для вас. – jfriend00

+0

Фактически вы можете видеть, что 'app.listen()' делает для вас правильно [здесь] (https://github.com/strongloop/express/blob/master/lib/application.js#L557). Он выполняет 'server.listen()' для вас. – jfriend00