Javascript io.sockets.emit不向服务器发送消息
我正在开发一个用户登录应用程序,试图Javascript io.sockets.emit不向服务器发送消息,javascript,node.js,express,socket.io,pug,Javascript,Node.js,Express,Socket.io,Pug,我正在开发一个用户登录应用程序,试图io.sockets.emit(“userLogin”,“some msg”)当某些用户登录时,服务器无法接收消息 服务器app.js: app.post('/sessions', function(req, res) { user.authenticate(req.body.login, req.body.password, req.body.role, function(user) { if (user) { req.ses
io.sockets.emit(“userLogin”,“some msg”)代码>当某些用户登录时,服务器无法接收消息
服务器app.js:
app.post('/sessions', function(req, res) {
user.authenticate(req.body.login, req.body.password, req.body.role, function(user) {
if (user) {
req.session.user = user;
console.log("correct");
io.sockets.emit("userLogin", "some msg");
res.redirect('/add_users');
} else {
console.log("wrong");
res.render('sessions', {locals: {
redir: req.body.redir
}});
};
});
});
Client login.jade:
html
head
script(src='jquery-1.7.1.js')
script(src='http://localhost:3002/socket.io/socket.io.js')
script(type='text/javascript')
var socket;
socket = io.connect('http://localhost:3002');
socket.on('userLogin', function(user) {
console.log("userLogin: ", user)
});
$(function() {
$("button").click(function() {
$.post("/sessions", {
time: (new Date).toLocaleTimeString(),
date: (new Date).toLocaleDateString()
});
});
});
body
h1 Login
form(action='/sessions', method='post')
input(type='hidden', name='redir', value='redir')
p
lable(for='login') Login:
input(type='text', name='login', id='login')
p
lable(for='password') Password:
input(type='text', name='password', id='password')
p
button Login
有趣的是,我在一个app.get()
函数中有另一个emit,客户端代码与之类似,可以正常工作。所以我怀疑这与这个app.post()
有关?感谢您的帮助,提前谢谢 提交表单会触发页面重新加载,从而断开socket.io的连接。你应该用它来避免这种情况
$("button").click(function(event) {
event.preventDefault();
$.post("/sessions", {
time: (new Date).toLocaleTimeString(),
date: (new Date).toLocaleDateString()
});
});
我怀疑这和邮局有什么关系。您确定用户在单击按钮时已正确连接到Socket.IO服务器吗?您是否也在多个用户中尝试过这段代码(毕竟您正在广播)?我认为当您发布表单时,页面会刷新,socket.io连接会断开。@Laurent Perrin:哦,是的,您是对的,在测试之后,我也注意到,我应该如何避免连接断开?