【问题标题】:render dynamic value from passport.socketio to jade view从 passport.socketio 渲染动态值到玉视图
【发布时间】:2015-08-05 06:32:59
【问题描述】:

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

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

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

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中的视图?

非常感谢任何帮助。

谢谢, 阿纳布

【问题讨论】:

    标签: node.js pug passport.js


    【解决方案1】:

    你的变量是错误的,你应该使用 #{count} 来代替:

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

    【讨论】:

    • 谢谢! @Michelem 我确实将其更改为 #{count.countData} 但是,它仍然在视图中未定义无法读取未定义的属性“countData”
    • 是的,因为你应该先定义对象,最好直接使用{count: c},我正在更新答案
    • 谢谢!我之前也试过 {count: c} 。但是,该值似乎没有传递给视图。当我在控制台中记录值时。即 console.log('count is '+c);我确实在控制台中获得了价值。但是, res.render('home', {count: c});不传递值,视图保持空白
    【解决方案2】:

    想通了。

    制作了一个通过套接字服务器内容的功能,该控件有助于在前端进行更新

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

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

    阿纳布

    【讨论】:

      猜你喜欢
      • 2012-08-22
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      • 2014-11-02
      • 1970-01-01
      相关资源
      最近更新 更多