app.js

> var debug = require('debug'); var express = require('express'); var
> path = require('path'); var favicon = require('serve-favicon'); var
> logger = require('morgan'); var cookieParser =
> require('cookie-parser'); var bodyParser = require('body-parser'); var
> exphbs = require('express-handlebars'); var mongoose =
> require('mongoose'); var session = require('express-session');
> 
> 
> var db = require('./dbconn');
> 
> 
> db.on('error', console.error.bind(console, 'connection error:'));
> db.once('open', function () {
>     console.log('we are connected!'); });
> 
> 
> var index = require('./routes/index'); var users =
> require('./routes/users'); var signup = require('./routes/signup');
> var login = require('./routes/login'); var adreqform =
> require('./routes/adreqform') var dashboard =
> require('./routes/dashboard')
> 
> var app = express();
> 
> 
> // view engine setup app.set('views', path.join(__dirname, 'views'));
> app.engine('hbs', exphbs({ extname: '.hbs', defaultLayout: 'layout'
> })); app.set('view engine', 'hbs');
> 
> // uncomment after placing your favicon in /public
> //app.use(favicon(__dirname + '/public/favicon.ico'));
> app.use(logger('dev')); app.use(bodyParser.json());
> app.use(bodyParser.urlencoded({ extended: false }));
> app.use(cookieParser()); app.use(express.static(path.join(__dirname,
> 'public'))); app.use(session({
>     secret: 'gh jewellery',
>     resave: true,
>     saveUninitialized: false
> 
> 
> })); app.use(function (req, res, next) {
> 
>     app.locals.currentUser = req.session.user;
>     next(); }); 
> 
> app.use('/', index); app.use('/users', users); app.use('/dashboard',
> dashboard); app.use('/signup', signup); app.use('/login', login);
> app.use('/adreqform', adreqform);
> 
> 
> 
> 
> 
> 
> 
> // catch 404 and forward to error handler app.use(function (req, res,
> next) {
>     var err = new Error('Not Found');
>     err.status = 404;
>     next(err); });
> 
> // error handlers
> 
> // development error handler // will print stacktrace if
> (app.get('env') === 'development') {
>     app.use(function (err, req, res, next) {
>         res.status(err.status || 500);
>         res.render('error', {
>             message: err.message,
>             error: err
>         });
>     }); }
> 
> // production error handler // no stacktraces leaked to user
> app.use(function (err, req, res, next) {
>     res.status(err.status || 500);
>     res.render('error', {
>         message: err.message,
>         error: {}
>     }); });
> 
> app.set('port', process.env.PORT || 3000);
> 
> module.exports = app;
> 
> var server = app.listen(app.get('port'), function () {
>     debug('Express server listening on port ' + server.address().port);
>   
> 
> });

注意我分配了app.locals.currentUser = req.session.user;当我的路由/登录命中时,上面和req.session.user被设置,这是它的代码 .

login.js

var express = require('express'); var router = express.Router(); var User = require('../ models / user.model.js'); var app = require('../ app'); / * GET注册页面 . * / router.get('/',function(req,res,next){res.render('login');}); router.post('/',function(req,res,next){User.findOne({email:req.body.email},function(err,user){
var logged = false;
if(错误){
的console.log(ERR);
}

else if(!user){

res.render('login',{errnoacc:'用户不存在!请注册 . '})
}

else if(user && req.body.password == user.password){

req.session.user = user;

res.render( '仪表盘');

}
else {res.render('login',{errpass:'密码不匹配 . 请再试一次!'});}

//req.session.userId = user._id;
//user.logged = true;

//res.render('dashboard',{user:user});

});

下一个();
}); module.exports = router;

在上面的代码中,当命中route.post时,我分配req.session.user = user;如果一切都很好,然后我渲染仪表板视图,但有一个layout.hbs,其中有navbar,我希望app.locals.currentUser的数据显示假设currentUser现在保存用户对象 . 在我的layouts.hbs {}中使用不起作用 . 我是表达开发的新手,所以我知道我错过了什么......