将 passport.socketio 中的动态值渲染到 jade 视图

render dynamic value from passport.socketio to jade view

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

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

在回调中,我将用户名存储在猫鼬集合中,并相应地在注销时从集合中删除用户。我计算了模型中需要传递并绑定到视图的用户数。 Jade 是模板引擎。下面是我的 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
}

并且在 jade 视图中,我尝试使用

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

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

我应该如何从服务器向 jade 视图呈现动态值?

非常感谢任何帮助。

谢谢, 阿纳布

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

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

想通了。

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

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 控制器 angular.module('myApp.controllers', [])。 控制器('AppCtrl',函数($范围,套接字){ socket.on('send:count',函数(数据){ $scope.count = data.count; }); });

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

阿纳布