2016-08-09 2 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") }); 

을 한 다음 템플릿에서 변수 이메일을 사용 : 당신은 당신이 양식 데이터를 유지하려는 경우,이 같은 양식 데이터를 다시 보낼 수, 메시지가 표시됩니다.