2016-10-17 5 views
1

일부 페이지를 렌더링하고 특정 시간 (초) 후에 다른 페이지로 리디렉션해야합니다. 그러나 "보낸 후 헤더를 설정할 수 없습니다."라는 메시지가 나타납니다. 내가 읽은 것에서는 응답이 한 번만 사용되어야하는데, 이것이 사실인지 확실하지 않습니다. 이 특정 문제에 대한 도움이나 해결책을 알려 주시면 감사하겠습니다.이미 사용 된 응답 후 리디렉션 노드 js

app.get('/', function (req, res) { 
    var message = req.flash(); 
    res.render('index', { message: req.flash('message'), hassError: message.length > 0}); 
}); 

app.get('/error', function (req, res) { 
    var timeout = 3000; 

    setTimeout(function (err) { 
     console.log('finished'); 
     if (err) 
      throw err; 
     console.log('################'); 
     res.redirect('/'); 
    }, timeout); 
    res.render('partials/404'); 
}); 

"finished"가 인쇄 된 다음 오류가 발생하지만 콜백에 지정된 오류는 발생하지 않습니다.

+0

ap.i에서 res.redirect를 두 번 보내고 있습니다. 가장 좋은 옵션은 아마도 부분 404 페이지에서 시간 제한을 설정하는 것입니다. – Brian

답변

2

이 방법을 사용할 수 없습니다. 즉, 렌더링 수단이 헤더가있는 브라우저로 전송 된 후 브라우저에서 HTTP 요청을 닫습니다. 두 번째 응답을 보낼 수 없습니다.

가 당신은 페이지에 자바 스크립트에 시간 제한 논리를해야 할 것이다

가 아닌 서버 :

<script> 
    var timeout = 3000; 

    setTimeout(function() { 
    window.location = "http://www.yoururl.com"; 
    }, timeout); 
</script> 
+0

매력처럼 작동합니다. 고맙습니다. – dlipovac012

+0

좋아요,이 대답을 받아 들일 수 있다면 감사하겠습니다. – 7zark7

0

당신이 보내려고 리디렉션은 서버 측에서 중 하나를 수행해야합니다 사용자가 안타 권리 서버로 이동하거나 404 페이지가로드 된 후 브라우저에서 완료됩니다.

1

단일 요청에 대해 여러 응답을 보낼 수 없습니다. 그것은 마치 누군가가 당신에게 햄버거를달라고 부탁하고, 햄버거를 주며, 떠나 버리는 것과 같습니다. 언젠가는 나중에 머리 뒤쪽에 또 다른 햄버거를 .다. 그들은 그것을 잡지 않을 것입니다.

이 경우 클라이언트 측에서 리디렉션을 처리해야합니다. 이것이 일반 페이지 렌더링 인 경우 meta 태그의 refresh 속성을 사용할 수 있습니다.

<meta http-equiv="refresh" content="2; url=http://path/to/my/page/" /> 

이것은 AJAX 요청 인 경우 지연 후 클라이언트가 리디렉션을 수행하도록해야합니다.