使用express3 中 使用了官方推荐的 req.flash() -> res.session.messages = ['foo'] or similar 遇到的问题
使用session 来保存错误提示后,我在app.js 里加了一层中间件。
用来将session中数据提取出来, 并删除保存了错误提示信息的session,
按照书上的例子,原本可以正常显示的, 但是由于加了一层是否判断权限的方法之后,
中间件会调用两次,这样session 里的数据在第一会被清空,其二次就拿不到了。造成页面显示不正常。
附上线上地址 198.136.24.206:3000
中间键如下
app.use(function(req,res,next){ var error = req.session.error , success = req.session.success; delete req.session.error; delete req.session.success; res.locals.user = req.session ? req.session.user:’’; res.locals.error = '’; res.locals.success = '’; if (error) res.locals.error = error; if (success) res.locals.success = success; next(); });
权限验证如下:
app.get('/reg’, checkNotLogin); app.get('/reg’, function(req, res){ console.log(‘reg get’); res.render('reg’, { title: '用户注册’, }); });
app.post('/reg', checkNotLogin); app.post('/reg', function(req, res){ //检验用户两次输入的口令是否一致 if (req.body['password-repeat'] != req.body['password']){ console.log('hello password'); console.log('p1:'+req.body['password-repeat']); console.log('p2:'+req.body['password']); req.session.error = '两次输入的口令不一致'; return res.redirect('/reg'); }
//生成口令的散列值
省略..
function checkNotLogin(req, res, next) { console.log(‘check not login’); if (req.session.user) { req.session.error = '已登陆’; return res.redirect(‘/’); } next(); }
}