2011-08-16 5 views
12

에 리디렉션, 나는 사용자에게 양식을 제공합니다 (Express에서 라우팅) 기능을 가지고 동일한 URL로 라우트되지만 이전 양식에서 제출 한 데이터를 수신하는 POST 요청을 처리합니다. 양식의 유효성을 검사하지 않으면 사용자가 양식으로 다시 이동합니다.내 Node.js를 응용 프로그램에서 명시 적/Node.js를

app.post('/register', function (req, res) { 
    if (validate(req.registerForm)) return res.redirect('back'); 
    persistStuff(req.registerForm, function (err, data) { 
    // Do error verification etc. 
    res.redirect('back') 
    }); 
}); 

내가하고 싶은 것은 오류 메시지를 보내는 것입니다 제시하는 선에서 :

if (validate(req.registerForm)) return res.redirect('back'); 

if (validate(req.registerForm)) return res.render('form', {msg:'invalid'}); 
뭔가를 작성하는 방법 그렇지 않으면 수행해야하는지 않습니다 POST-REDIRECT-GET 패턴을 따르기 때문에

을 사용할 수 없습니다.

if (validate(req.registerForm)) return res.redirect('/register?msg=invalid'); 

과 같은 작업을 수행 할 수 있지만 코드에 URL을 하드 코딩 할 수 있으므로 사용하지 않는 것이 좋습니다. 그것을 할 다른 방법이 있습니까?

+0

http://stackoverflow.com/q/5555053/-format-in-express-node-number/5558861 # comment16886850_5558861 – chovy

답변

8

flash notifications을 사용해야하며 표현에 내장되어 있습니다. req.flash("error", "Invalid form...");

당신은 당신의 렌더링 템플릿에 메시지를 추가하는 동적 핸들러를해야합니다, 또는 당신은 TJ가 표현을 위해 만든 한 사람을 확인할 수 있습니다 :

은 당신과 같이 메시지를 추가합니다. (express-messages)

+1

노드 4.0에서 또는 콧수염과 같은 템플릿으로 플래시가 작동하지 않습니다. – ingrid

3

당신은 단순히 그것은 res.redirect('..?error=1')

는 AS 리디렉션 할 수 있 었는가? 태그는 브라우저에 선택적 매개 변수 집합임을 알리고 ..는 단지 경로명 관련 호출 (예 : 터미널에서 cd ​​...를 호출하여 하나의 디렉토리로 이동하는 것)임을 나타내며 이고 브라우저가 해당 페이지로 이동합니다 끝 태그 : http://.....?error=1

는 당신은 단순히을 수행하여 해당 페이지의 오류를 뽑을 수 :

if (req.param("error" == 1)) { // do stuff bassed off that error match };

여러 다른 오류 값을 하드 코딩하고에 따라 적절하게 응답 할 수 있습니다

무엇을 오류가 발생했습니다

+0

대안을 보내 주셔서 감사합니다.하지만 플래시 알림을 사용하는 것이 더 나은 이유는 무엇입니까? – brandizzi

+1

아, 와우, 당신이 질문의 하단에 자신을 제안했다는 사실을 알지 못했습니다. 명백한 이점이 있다고 생각하지 마십시오. 구현하기가 조금 더 간단하고 오류가 URL에 있기 때문에 오류가 조금 더 가시적이고 추적 가능하지만 동일한 작업을 수행해야합니다. 무언가를 표시하는 것보다 {무언가가} 조금 복잡하다면 사용자가 URL에 직접 오류 메시지를 입력하여 악용 할 수 있기 때문에이 방법으로 처리하는 것이 안전하지 않을 수 있습니다. – gadu

관련 문제