【发布时间】:2023-03-25 00:48:01
【问题描述】:
我正在开发一个用户登录应用程序,当有人登录时尝试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() 有关?任何帮助表示赞赏,在此先感谢!
【问题讨论】:
-
我怀疑它与 POST 有什么关系。您确定用户在单击按钮时已正确连接到 Socket.IO 服务器吗?你也试过这个代码有多个用户(你毕竟是广播)?
-
我认为当您发布表单时,页面会刷新并且 socket.io 连接会断开。
-
@Laurent Perrin:哦,是的,你是对的,经过测试,我也注意到了,我应该如何避免连接断开?
标签: javascript node.js express socket.io pug