Node / Express应用程序使用connect-flash时无法获取Flash消息
当用户成功login到我的应用程序时,我正尝试通过连接闪光灯呈现Flash消息。
我可以控制台登出的消息,但他们似乎并没有得到渲染客户端。
不过,我知道客户端没有什么错,因为当我在路由中用一个简单的stringreplace了req.flash[0]
,比如'You have successfully login!'
那么消息确实出现。
护照configuration:
// Local login Strategy passport.use('local-login', new LocalStrategy( { usernameField: 'email', passwordField: 'password', passReqToCallback: true }, (req, email, password, done) => { User.findOne({ 'local.email': email }) .then(user => { if (!user) return done(null, false); user.validPassword(password, (err, res) => { if (err) return done(err); if (!res) return done(null, false); done(null, user, req.flash('success', 'Login Successful!')); }); }) .catch(err => done(err)); } ));
路线:
app.post( '/api/login', passport.authenticate('local-login'), (req, res) => { console.log(req.flash('success')); const user = { user: req.user, msg: req.flash('success')[0] // Works when I replace with 'You have successfully logged in' }; res.send(user); } );
服务器:
const express = require('express'); const bodyParser = require('body-parser'); const mongoose = require('mongoose'); const passport = require('passport'); const flash = require('connect-flash'); const cookieParser = require('cookie-parser'); const cookieSession = require('cookie-session'); const keys = require('./config/keys'); require('./models/User'); require('./services/passport'); mongoose.connect(keys.mongoURI); const app = express(); app.use(bodyParser.json()); app.use(cookieParser()); app.use(flash()); app.use( cookieSession({ maxAge: 30 * 24 * 60 * 60 * 1000, keys: [keys.cookieKey] }) ); app.use(passport.initialize()); app.use(passport.session()); require('./routes/authRoutes')(app); app.get('/', (req, res) => { res.json({ message: 'hello' }); }); if (process.env.NODE_ENV === 'production') { app.use(express.static('client/build')); const path = require('path'); app.get('/', (req, res) => { res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html')); }); } const PORT = process.env.PORT || 5000; app.listen(PORT, () => console.log('Working'));
奇怪的问题,但console.log(req.flash('success')
调用console.log(req.flash('success')
之前将其合并到响应实际上使它失败。一旦我删除控制台日志行开始工作。
不知道为什么这是 – 不知道这是为什么,如果任何人有任何想法很想知道。
- 如何仅在经过身份validation时才给予会话? 任何其他中间件订单将无法正常工作
- express.js不在nodeunittesting中保存会话数据
- NodeJS / express / connect-redis:Redis没有错误; 会议缺失
- ExpressJS 3.0如何将res.locals传递给玉视图?
- 在Express中使用MongoStore时出错
- req.session.passport为空:req.user未定义
- 处理令牌的体系结构(NodeJS)(MongoDB)
- 用JavaScript语句构造一个select器
- 配对帆,护照和mongo:错误:挂钩(`会议`)加载失败! 对象…没有方法“分配”