将套接字数据发送到nodejs中的特定ejs页面

时间:2016-02-09 07:10:31

标签: node.js sockets express ejs

我在节点中使用express plus ejs作为视图引擎。我在通过套接字发出消息时遇到问题。我的主文件名  是index.js,视图文件位于pages/messages内,即ejs 文件。我正在使用

app.get('/messages/:id', function(req,res)          {
            res.render('pages/messages');

            });

io.sockets.on('connection', function(socket) {

  socket.on('chat message', function(msg) {       console.log(msg);    socket.emit('chat message', msg);

        });   
});

以上代码我在主文件中使用index.js,下面的代码作为前端

<script src="/socket.io/socket.io.js"></script> 
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>

 <script>   var socket = io(); 
    $(document).ready(function()
{   $('form').submit(function(e){  
 alert('1');    
e.stopPropagation();    
e.preventDefault();
        socket.emit('chat message', $('#m').val(), '');
        $('#m').val('');
        return false;   });
             socket.on('chat message', function(req, res){
        $('#messages').append($('<li>').text(res));
               });  }); 
</script>




 <ul id="messages"></ul>

      <form action="" >
          <input id="m" autocomplete="off" /><button>Send</button>
        </form> 
发出后的

包含空数据。

1 个答案:

答案 0 :(得分:0)

req,res参数用于快速路线而不用于socket events。请进行以下更改并检查其是否有效:

socket.emit('chat message', $('#m').val());

socket.on('chat message', function(data){
    $('#messages').append($('<li>').text(data));
}); 

在你的后端,将其更改为应解决回声问题:

io.sockets.on('connection', function(socket) {
     socket.on('chat message', function(msg) {             
       console.log(msg);        
       socket.broadcast.emit('chat message', msg);

     });   
   });