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);
    }
});

});
4

1 に答える 1

0

次のように、特定の 1 つのページにフラッシュ メッセージを送信できます。

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

したがって、現在のページが "/login" の場合、同じページに応答を送信する必要があり、メッセージが表示されます。フォーム データを保持したい場合は、次のようにフォーム データを送り返すことができます。

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

次に、テンプレートで変数 email を使用します。

于 2016-08-10T06:06:30.783 に答える