2016-10-17 3 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'); 
}); 

«Готово» печатается, а затем выдает ошибку, но не ошибку, указанную в обратном вызове.

+0

вы отправляете res.redirect дважды на свой api. ваш лучший вариант, вероятно, установить тайм-аут на частичные 404 стр. – Brian

ответ

2

Вы не можете использовать этот подход - средство рендеринга отправляется в браузер с заголовками, а затем HTTP-запрос закрывается браузером. Вы не можете отправить второй ответ.

Вы должны будете сделать логику тайм-аут в JavaScript на странице, а не сервер:

<script> 
    var timeout = 3000; 

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

Работает как шарм. Спасибо – dlipovac012

+0

Отлично, также, если бы вы согласились, этот ответ был бы признателен. – 7zark7

0

Перенаправление вы пытаетесь отправить должно быть сделано либо на стороне сервера прав, когда пользователь нажимает сервера или сделана в браузере после загрузки страницы 404.

1

Невозможно отправить несколько ответов на один запрос. Похоже, если кто-то попросит вас взять гамбургер, вы дадите им гамбургер, и они уйдут. Некоторое время спустя вы кладете еще один гамбургер в затылок. Они не поймают его.

В этом случае вам необходимо обработать перенаправление на стороне клиента. Если это всего лишь обычный рендер страницы, вы можете использовать атрибут refresh тега meta.

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

Если это запрос AJAX, вам необходимо будет выполнить перенаправление клиента после задержки.

Смежные вопросы