无法在nodejs / express中传递对象进行查看

时间:2015-05-20 14:48:31

标签: javascript node.js express passport.js

我正在尝试在节点项目中配置护照,我有登录和注册工作,但我无法将我的帐户对象传递给我的视图,以便我可以说'欢迎,名字'

我的护照登录策略返回帐户,如下所示:

passport.use('local-login', new LocalStrategy({
        usernameField : 'username',
        passwordField : 'password',
        passReqToCallback : true
    },
    function(req, username, password, done){
        process.nextTick(function(){
            Account.findOne({'username' : username}, function(err, account){
        if(err)
            return done(err);

        if(!account)
            return done(null, false, req.flash('loginMessage', 'No user found.'));

        if(!account.validPassword(password))
            return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.'));

        //console.log('email: ' + account.email);
        return done(null, account);
        });
    }); 
}));

我使用该策略的路线是:

app.post('/', passport.authenticate('local-login', {
    successRedirect : '/profile',
    failureRedirect : '/',
    failureFlash : true
}));

和个人资料路线:

app.get('/profile', isLoggedIn, function(req, res) {
    var jaccount = JSON.stringify(req.account);
    //console.log('email: ' + jaccount.email);
    res.render('../app/views/profile/index.ejs', {
        account : jaccount
    });
});

和isLoggedIn函数:

function isLoggedIn(req, res, next){
    if(req.isAuthenticated()){
        return next();
    }

    res.redirect('/');
}

视图给出了错误:

  
    

21 | <%if(account.email){%>        22 |

       23 |

<%= account.account_type%>

       24 |

<%= account.username%>

         

无法读取未定义

的属性'email'   

非常感谢任何帮助或建议,这是我的第一个节点项目,因此对于愚蠢的错误道歉。

谢谢,

1 个答案:

答案 0 :(得分:1)

将实际对象传递给视图,而不是通过JSON.stringify()

运行它
app.get('/profile', isLoggedIn, function(req, res) {
    //var jaccount = JSON.stringify(req.account);
    //console.log('email: ' + jaccount.email);
    res.render('../app/views/profile/index.ejs', {
        account : req.account
    });
});