我在节点中使用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>
发出后的包含空数据。
答案 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);
});
});