2017-10-19 3 views
1

ユーザーがアプリケーションに正常にログインしたときにconnect-flash経由でフラッシュメッセージをレンダリングしようとしています。ノード/ Expressアプリケーションでconnect-flashを使用しているときにレンダリングするフラッシュメッセージを取得できません

私はフラッシュメッセージをログアウトすることができますが、レンダリングされたクライアント側にはなっていないようです。

しかし、私は'You have successfully login!'のような単純な文字列と私のルートで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')); 

答えて

1

奇妙な問題が、ターンそれを実際にレスポンスに組み込む前にconsole.log(req.flash('success')と呼ぶことによってそれを打ち切ります。コンソールログを削除すると、作業が始まりました。

なぜこのようなものなのかわかりません。なぜ誰かが知りたいと思っていることがあれば、これがなぜなのかわかりません。

関連する問題