Node.js 在视图中访问Express会话变量

Node.js 在视图中访问Express会话变量,node.js,express,express-session,Node.js,Express,Express Session,我正在尝试访问EJS视图中的会话变量。但我不能这么做 下面是代码 var express=require('express'); var mongoose=require('mongoose'); var db=require('./models/db.js'); var routes=require('./routes/route.js'); var user=require('./routes/user.js'); var bodyParser=require('body-parser')

我正在尝试访问EJS视图中的会话变量。但我不能这么做 下面是代码

var express=require('express');
var mongoose=require('mongoose');
var db=require('./models/db.js');

var routes=require('./routes/route.js');
var user=require('./routes/user.js');
var bodyParser=require('body-parser');

var session=require('express-session');
var cookieParser=require('cookie-parser');

mongoose.connect('mongodb://localhost/test');

var app=express();

app.set('view engine','ejs');

app.use(express.static(__dirname + '/public'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:false}));
app.use(cookieParser());
app.use(session({secret:"qazwsxedcrfvtgbyhnujm"}));


app.get('/',routes.home);
app.get('/register',routes.register);
app.post('/createUser',user.doCreate);
app.get('/login',routes.login);
app.post('/authenticate',user.login);


var port = process.env.PORT || 3000;

var server=app.listen(port,function(req,res){
    console.log("Catch the action at http://localhost:"+port);
});
这是登录处理程序

    exports.login=function(req,res){

    var username=req.body.username;
    var password=req.body.password;

    User.findOne({username:username}, function(err,user){

      if(err){
        console.log("Error : Please enetr valid username and password");
        res.redirect("/login");
      }

     user.comparePassword(password,function(err,isMatch){
       if(isMatch && isMatch==true){
         console.log("Authentication Suucessfull");
         req.session.username=user.username;
         res.render("/",{username:req.session.username});
       }else{
         console.log("Authentication UnSuucessfull");
         res.redirect("/login");
       }

     });

    });
  }
<div id="page-content-wrapper">
            <div class="container-fluid">
                <div class="row">
                    <div class="col-lg-12">
                        <h1>Awesome</h1>
                        <% if( typeof(username) !== 'undefined' ) { %>
                        <h1><%=username%></h1>
                        <%}%>
                        <p>This template has a responsive menu toggling system. The menu will appear collapsed on smaller screens, and will appear non-collapsed on larger screens. When toggled using the button below, the menu will appear/disappear. On small screens, the page content will be pushed off canvas.</p>
                        <p>Make sure to keep all page content within the <code>#page-content-wrapper</code>.</p>
                        <a href="#menu-toggle" class="btn btn-default" id="menu-toggle">Toggle Menu</a>
                    </div>
                </div>
            </div>
        </div>
在EJS视图中,我试图打印由登录处理程序设置的用户名

    exports.login=function(req,res){

    var username=req.body.username;
    var password=req.body.password;

    User.findOne({username:username}, function(err,user){

      if(err){
        console.log("Error : Please enetr valid username and password");
        res.redirect("/login");
      }

     user.comparePassword(password,function(err,isMatch){
       if(isMatch && isMatch==true){
         console.log("Authentication Suucessfull");
         req.session.username=user.username;
         res.render("/",{username:req.session.username});
       }else{
         console.log("Authentication UnSuucessfull");
         res.redirect("/login");
       }

     });

    });
  }
<div id="page-content-wrapper">
            <div class="container-fluid">
                <div class="row">
                    <div class="col-lg-12">
                        <h1>Awesome</h1>
                        <% if( typeof(username) !== 'undefined' ) { %>
                        <h1><%=username%></h1>
                        <%}%>
                        <p>This template has a responsive menu toggling system. The menu will appear collapsed on smaller screens, and will appear non-collapsed on larger screens. When toggled using the button below, the menu will appear/disappear. On small screens, the page content will be pushed off canvas.</p>
                        <p>Make sure to keep all page content within the <code>#page-content-wrapper</code>.</p>
                        <a href="#menu-toggle" class="btn btn-default" id="menu-toggle">Toggle Menu</a>
                    </div>
                </div>
            </div>
        </div>

我在这里缺少什么?

尝试
console.log(user)
并查看mongoDB正在返回您认为的内容,一个带有
用户名的对象
propertyThanks@adeneo得到了它,一切都很好,只是有点混乱。现在可以工作了,console.log()适合调试。但当我在成功登录后使用res.redirect()将用户重定向到主页时,会显示未定义重定向到“/”。我们不能用重定向发送一些数据,比如res.redircet(“/”,{username:req.session.username});我们不能直接在EJS视图中访问会话数据,而不是在重定向时附加数据吗,正如我在上面所做的那样否,您必须将其添加到输出
/
的路由中,然后尝试
控制台.log(user)
,并查看mongoDB是否返回您认为的结果,一个带有
用户名的对象
propertyThanks@adeneo得到了它,一切都很好,只是有点混乱。现在可以工作了,console.log()适合调试。但当我在成功登录后使用res.redirect()将用户重定向到主页时,会显示未定义重定向到“/”。我们不能用重定向发送一些数据,比如res.redircet(“/”,{username:req.session.username});我们不能直接在EJS视图中访问会话数据,而不是在重定向时附加数据吗?正如我在上面所做的那样否,您还必须将其添加到输出
/
的路由中