1

で最初のプロジェクトを開発していnodejsます。express 3フレームワークとしてsocket.io、またクライアント サーバー通信に使用します。現在、登録フォームを作成しようとしています。socket.ioそれは非常にうまく機能しますが、 とexpressを正しく一緒に使用する方法がわかりません。

電子メールとパスワードが有効かどうかを確認します。有効でない場合は、json オブジェクトをクライアントにプッシュしたいと思います。

私はこのアプリルートを使用します:

app.post('/user', function (req, res) {
    var user = new User(req.body.user), 
        errors;

    function userSaveFailed() {
        res.render('index');
    }

    errors = user.validation(req.body.user.confirm);
    user.save(errors, function (err) {
        if (err) {
            // Here I would like to send the Object to the client.
            io.sockets.on('connection', function (socket) {
                socket.emit('registration', {
                    errors : errors
                });
            });
            return userSaveFailed();
        }
        res.render('user/new.jade');
    });
});

クライアントは json オブジェクトを取得しますが、別のクライアントが接続すると、そのクライアント'/'もオブジェクトを取得します。socket.io使い方が間違っていると思います。.emit()アプリルートでa を使用する一般的な方法は何ですか? このテストのためsocket.ioにグローバル認証を使用する必要がありますか?express

4

1 に答える 1

1

そのための 1 つの方法 (本当に socket.io を使用して投稿に返信したい場合は、おそらくそうすべきではありません) は、ユーザー セッションごとに 1 つのルームを使用することです。

その上で次のon("connection", ...)ようにします:

socket.join(room)room は、セッションに固有のものです (たとえば、セッション ID など)。

次に、1 人のユーザーのみに送り返します。

socketio.of('/')['in'](room).emit(...);、room は上記で使用したのと同じ一意の ID です。

于 2013-01-28T23:14:47.923 に答える