0

私はユーザーログインアプリケーションに取り組んでおり、ログインしている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
        }});
    };
});
});

クライアント 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()関数に別の出力があり、クライアント側のコードが似ていて、それが機能します。だから私はそれがこれと関係があるのではないかと疑っていapp.post()ますか?どんな助けでも大歓迎です、事前に感謝します!

4

1 に答える 1

0

フォームを送信すると、ページのリロードがトリガーされ、socket.io が切断されます。それを避けるには、 event.preventDefaultを使用する必要があります。

$("button").click(function(event) {
  event.preventDefault();

  $.post("/sessions", {
    time: (new Date).toLocaleTimeString(),
    date: (new Date).toLocaleDateString()
  });
});
于 2012-08-07T08:32:27.930 に答える