我正在开发一个用户登录应用程序,当有人登录时尝试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
}});
};
});
});
客户登录.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()
函数中有另一个发出,并且客户端代码类似,这是有效的。所以我怀疑这与app.post()
有什么关系?感谢任何帮助,提前谢谢!
答案 0 :(得分:0)
提交表单会触发页面重新加载,从而断开socket.io。您应该使用event.preventDefault来避免这种情况。
$("button").click(function(event) {
event.preventDefault();
$.post("/sessions", {
time: (new Date).toLocaleTimeString(),
date: (new Date).toLocaleDateString()
});
});