2014-01-29 2 views
6

Почему не работает?res.send(), then res.redirect()

res.send({ 
    successMessage: 'Task saved successfully.' 
}); 
res.redirect('/'); 

В основном я нуждаюсь в успехе для запросов AJAX. Переадресация необходима, когда запрос является стандартным почтовым запросом (не AJAX).

Следующий подход, кажется, не очень чистый для меня, как я не хочу, чтобы заботиться о внешнем интерфейсе-технологии в моем внутреннем интерфейсе:

if(req.xhr) { 
    res.contentType('json'); 
    res.send({ 
     successMessage: 'Aufgabe erfolgreich gespeichert.' 
    }); 
} else { 
    res.redirect('/'); 
} 

ответ

3

Вы можете использовать код состояния, чтобы указать, что ваша задача была сохранена, а затем перенаправлена. Попробуйте это:

res.status(200); 
res.redirect('/'); 

ИЛИ

res.redirect(200, '/'); 

Поскольку AJAX знает успех или неуспех кодов, например, если вы отправите 404, функция успеха AJAX не будет выполнять

+0

Что делать, если вы хотите отправить данные в свое приложение при переадресации? – JaKXz

+0

сделать запрос ajax на сервер при загрузке перенаправленной страницы. –

1

Первый фрагмент кода не работает, потому что res.send отправляет заголовки уже, поэтому res.redirect после этого просто невозможно.

Второй сниппет должен работать. В основном, то, что он делает, является проверкой, является ли запрос AJAX (затем возвращает JSON), в противном случае происходит перенаправление.

+0

Но есть более чистый подход? – mosquito87

+1

Несомненно, отделите свой JSON API от обслуживания HTML-страниц. – bredikhin

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