2016-08-09 8 views
0
"connect-flash": "^0.1.1", 
"cookie-parser": "^1.4.3", 
"ejs": "^2.4.2", 
"express": "^4.14.0", 
"express-session": "^1.13.0", 

私はこの既存のユーザー名または電子メールが存在するかどうかを確認する要求を書きました。もしそうであれば、ユーザー名または電子メールのどちらかが取られているというメッセージが点滅します。何もしなければ、データを保存してデータベースに保存します。私の質問は、「ユーザー名が取られました」または「そのメールが取られました」というメッセージをフラッシュするために、usernameFlash(); res.redirect('/')に電話する必要があります。これには、ホームページにリダイレクトする必要があります。このホームページには、メールやユーザー名が使用されたかどうかをユーザーに知らせる目的がありません。このシナリオでは、どのようにしてリダイレクトを呼び出さずにメッセージをフラッシュできますか?フラッシュメッセージにリダイレクトが必要

app.post('/signup', function(req, res) { 

function usernameFlash(){ 
    req.flash('messages', 'That username is taken.'); 
} 

function emailFlash(){ 
    req.flash('messages', 'That email is taken.'); 
} 


var userDetails = User({ 
    firstname: req.body.firstname, 
    username: req.body.username, 
    email: req.body.email, 
    password: bcrypt.hashSync(req.body.password1, bcrypt.genSaltSync(10)) 
}); 

User.findOne({ 
    $or: [ { 'username': req.body.username}, {'email': req.body.email}] 
}, function(err, user) { 
    if (user) { 
     if(user.username === req.body.username){ 
      usernameFlash(); 
      res.redirect('/') 
     } else { 
     } 
     if(user.email === req.body.email){ 
      emailFlash(); 
      res.redirect('/') 
     } else { 
     } 
    } else { 
     userDetails.save(function(err) { 
     if (err) throw err; 
     }); 
     res.redirect('/'); 
     console.log('change to login') 
    } 
    if (err) { 
     return done(err); 
    } 
}); 

}); 

答えて

0

あなたは、このように一つの特定のページにフラッシュメッセージを送ることができます:

res.render("/user/login", { messages: req.flash("info", "That email is taken") }); 

をので、あなたの場合には、あなたの現在のページが「/ログイン」であれば、あなたは同じページに応答を送信する必要がありますし、

res.render("/user/login", { email: req.body.email, messages: req.flash("info", "That email is taken") }); 

してからテンプレートに変数電子メールを使用する:あなたは、フォームデータを保持したい場合は、あなたがこのような形式のデータを送り返すことができ、メッセージが表示されます。

関連する問題