2016-06-23 42 views
0

我正在与Socket.io一起学习NodeJS 我有一个非常简单的聊天页面。但我不知道我的错误在哪里。无法使用NodeJS/Socket.io在HTML文件中检索简单的广播消息

这里是我的简单的代码:

index.js

var express = require('express'); 
var app = express(); 
app.use('/', express.static(__dirname + '/')); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

app.get('/', function(req, res){ 
    //res.send('<h1>Hello World</h1>'); 
    res.sendFile(__dirname + '/index.html'); 
}); 

io.on('connection', function(socket){ 
    //console.log('a user is connected!'); 
    socket.on('disconnect', function() { 
     //console.log('user disconnected!'); 
    }); 
    socket.on('chat message', function(msg) { 
     io.emit('chat message: ' + msg); 
    }); 
}); 

http.listen(3000, function() { 
    console.log('listening on *:3000'); 
}); 

的index.html

<body> 
    <ul id="messages"></ul> 
    <form action=""> 
    <input id="m" autocomplete="on" /><button>Send</button> 
    </form> 
    <script type="text/javascript" src="jquery-1.12.4.js"></script> 
    <script src="/socket.io/socket.io.js"></script> 
    <script> 
    var socket = io(); 
    $('form').submit(function() { 
     socket.emit('chat message', $('#m').val()); 
     $('#m').val(''); 
     return false; 
    }); 
    socket.on('chat message', function(msg) { 
     console.log(msg); //NO VALUE? 
    }); 
    </script> 
</body> 

我不能让在这条线的值:

socket.on('chat message', function(msg) { 
      console.log(msg); //NO VALUE? 
     }); 
无法在客户端上收到
+1

试** VAR插座= 10(” http:// localhost:3000“); ** < - 你应该在http:// localhost之前,我不知道评论不显示。 – modernator

+0

仍然有同样的效果。没有价值。 – Jerielle

+0

Socket.io和Node.JS使用Websocket协议,这与'socket'非常不同 - 我正在编辑你的问题来修复标记。请注意。 – Myst

回答

2

的消息,因为随着

// Server: Receive and send message 
socket.on('chat message', function(msg) { 
    io.emit('chat message: ' + msg); 
} 

你发出一个名为chat message: ${msg}的事件,但是这是你是不是在客户端监听的事件。 发出事件时,首先定义事件名称,然后将数据指定为second parameter in JSON format。将上面的代码更改为

// Server: Receive and send message 
socket.on('chat message', function(data) { 
    io.emit('chat message', { message : data.message }); 
} 

将以消息作为数据向客户端发送事件。将事件从客户端发送到服务器时,应用相同的语法。因此,改变

// Client: Send message 
$('form').submit(function() { 
    socket.emit('chat message', $('#m').val()); 

// Client: send message 
$('form').submit(function() { 
    socket.emit('chat message', {message : $('#m').val()}); 

当服务器回答您的活动,那么你就可以接收和按如下方式访问消息:

// Client: Receive message 
socket.on('chat message', function(data) { 
    console.log(data.message); // VALUE :-) 
}); 
+0

感谢一个非常明确的解释。无论如何,我正在按照这个教程,我只是添加一些代码行。 http://socket.io/get-started/chat/ – Jerielle