편집 - 코드 샘플없이 예제가 필요한 것보다 많거나 적은지 잘 모르겠습니다.
양식의 POST 요청 처리기에서 즉시 양식 서식 파일을 렌더링하는 경우 req.session
을 사용할 필요가 없을 것입니다. 해당 지역을 저장하고 템플릿을 렌더링하면됩니다.
리디렉션해야하거나 그렇지 않은 경우 여러 요청에서 사용할 수있는 값이 필요하면 다음과 같이 값을 req.session
에 저장할 수 있습니다.
어느 쪽이든 귀하의 옥 (Jade) 템플릿이 모든 케이스를 처리하는지 확인하십시오. 예제에서는 if(locals.savedValues)
을 테스트하여 기본값 또는 저장된 값을 양식에 쓸지 결정합니다.
마지막으로 오류가 비취 관련이 아닌 경우 해당 오류를 붙여 넣으십시오.
req.session을 사용하여 값을 저장하십시오. 양식을 렌더링하기 전에 locals
변수에 저장된 값 또는 null을 나타내도록 설정하십시오. 당신의 옥 템플릿에서
app.get('/form', function(req, res){
res.locals.savedValues = req.session.savedValues || null;
res.locals.savedErr = req.session.savedErr || null;
res.render('form');
});
app.post('/form', function(req, res){
var values = {
name: req.body.name,
email: req.body.email,
};
validateForm(values, function(err, processed){
if(err){
req.session.savedValues = processed;
req.session.savedErr = err;
// req.session.savedValues = values, if you dont want to propose changes
res.redirect('back');
} else {
delete req.session.savedValues;
delete req.session.savedErr;
res.redirect('/success');
};
});
});
는 두 경우 모두 처리 :
if(locals.savedErr)
span.error=locals.savedErr
form(action='form', method='post')
if(locals.savedValues)
input#name(type='text')=locals.savedValues.name
input#email(type='text')=locals.savedValues.email
else
input#name(type='text')
input#email(type='text')
감사합니다! 나는 세션과 함께 일하는 데 익숙하지 않습니다. 'app.use (express.cookieParser());와이 app.use (express.session();)는 req.session에 값을 저장하는 데 필요한 모든 것입니다. –
간단한 질문입니다. req.session의 값을 res.locals에 저장하면 req.session을 사용할 수 없으므로 옥의 값으로 가져올 수 있습니다. 변수를 ?이 같은 전망이 잘못된 'res.render ('형태'가 { savedValues : req.session.savedValues || 널 (null), savedErr : req.session.savedErr || 널 (null), ... }); ' –
포스트 요청에서 폼을 다시 렌더링 할 수 있습니다. 세션이 필요 없다면 – Plato