2013-09-25 1 views
1

빌드 및 응용 프로그램에 Node/Express 및 Jade를 사용하고 있습니다.재 렌더링 뷰에서 JadeJS 및 사전 작성된 양식 값

양식 입력을 검사하고 유효성을 검사하는 POST 경로가 있으며이를 MongoDB에 저장합니다. 이 양식 입력이 유효하지 않으면 경로가 전달되어 오류가 발생하고 오류 처리기가이 페이지를 다시 렌더링합니다.

여기에 문제가 있습니다. 이 재 렌더링에서 폼 값을 미리 쓰고 사용자가 수정할 준비가 되길 원합니다 ... 나는 사용자가 모든 것을 다시 써야하는 깨끗한 폼을 원하지 않습니다.

req.body (sanitized) 데이터를 다시 렌더링 된 페이지로 제출하려고했습니다. 그러나 옥의 시각에서이 데이터를 사용하려고하면이 req.body 데이터가 이 아니고이 아닌 노드가 출력되고 오류가 발생합니다 ...이 페이지를 처음 입력하면 잘못 입력 된 것과 같습니다 입력이 아직 없습니다.

어떻게하면 좋을까요?

답변

1

편집 - 코드 샘플없이 예제가 필요한 것보다 많거나 적은지 잘 모르겠습니다.

양식의 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') 
+0

감사합니다! 나는 세션과 함께 일하는 데 익숙하지 않습니다. 'app.use (express.cookieParser());와이 app.use (express.session();)는 req.session에 값을 저장하는 데 필요한 모든 것입니다. –

+0

간단한 질문입니다. req.session의 값을 res.locals에 저장하면 req.session을 사용할 수 없으므로 옥의 값으로 가져올 수 있습니다. 변수를 ?이 같은 전망이 잘못된 'res.render ('형태'가 { savedValues ​​: req.session.savedValues ​​|| 널 (null), savedErr : req.session.savedErr || 널 (null), ... }); ' –

+0

포스트 요청에서 폼을 다시 렌더링 할 수 있습니다. 세션이 필요 없다면 – Plato