从passport.socketio到玉视图呈现动态值

时间:2015-08-05 06:33:00

标签: node.js pug passport.js

我对节点和socketio相对较新。我想要实现的是使用护照验证用户身份并将记录的用户总数发送到视图。这样,如果登录用户可以看到当前登录用户的总数,并且如果用户记录计数减少或增加,则其他人分别登录。

使用passport.socketio从socket.io连接访问经过身份验证的护照用户信息。

在回调中,我将用户名存储在mongoose集合中,并相应地在注销时将用户从集合中删除。我得到了模型中需要传递并绑定到视图的用户数量。玉是模板引擎。下面是我的onAuthorizeSuccess回调在我尝试将计数传递给home.jade的方式。

function onAuthorizeSuccess(data, accept) {

    var username = data.user.username;

    var User = mongoose.model('loggedusers', userSchema);

    var user = new User({
        username: username
    });

    user.save(function (err, data) {
        if (err) console.log(err);
        else {
            console.log('Saved : ', data);
        }

        User.count({}, function (err, c) {
            console.log('Count is ' + c);

            app.get('/', function (req, res) {

                res.render('home', {
                    count: {
                        countData: c
                    }
                });
            });
        });

    });

    console.log('successful connection to socket.io ');

    accept(); //Let the user through
}

在玉器视图中,我尝试使用

进行设置
li Logged Users ---> #{countData.c}

但是,在视图中未定义countData。

我应该如何将服务器中的动态值渲染到jade中的视图?

非常感谢任何帮助。

谢谢, ARNAB

2 个答案:

答案 0 :(得分:0)

您的变量有误,您应该使用#{count}代替:

res.render('home', {count: c});

答案 1 :(得分:0)

想出来了。

通过套接字实现服务器内容的功能,控件有助于在前端进行更新

module.exports = function (socket) {

setInterval(function () {

var UserSchema = require('mongoose').model('loggedusers');

UserSchema.count({}, function(err, c){

    console.log('Count is ' + c);
    socket.emit('send:count', {
        count: c
    });

   });
}, 1000);
};

角度控制器     angular.module('myApp.controllers',[])。     controller('AppCtrl',function($ scope,socket){     socket.on('send:count',function(data){     $ scope.count = data.count;     });     });

并在jade {{count}}中添加div.container(ng-controller='AppCtrl')应该在前端提供更新后的计数。

ARNAB