当用户成功登录我的应用程序时,我尝试通过 connect-flash 呈现 Flash 消息。
我可以通过控制台注销闪现消息,但它们似乎没有在客户端呈现。
但是,我知道客户端没有任何问题,因为当我用像 ' 这样的简单字符串替换路由中的
然后消息确实出现。req.flash[0]
时,您已成功登录!'
护照配置:
// 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')
实际上导致了失败。一旦我删除了控制台日志行,它就开始了工作。
不确定为什么会这样 - 不确定为什么会这样,如果有人有任何想法很想知道。
关于node.js - 对 Node/Express 应用程序使用 connect-flash 时无法获取要渲染的 Flash 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46821199/