Witam, piszę apke to tworzenia ankiet, i potrzebuję zrobić przycisk który pozwoli na usunięcie danej ankiety i przekierowanie na stronę główną. Zrobiłem więc button który onclick będzie wysyłal zapytanie do serwera metodą DELETE, natomiast ID ankiety jest przesyłane w URL.
Plik public/show_poll.hbs
var deleteUrl = location.origin + '/polls/' + '{{{id}}}' + '/delete';
var redirectUrl = location.origin;
function deletePoll() {
var xhr = new XMLHttpRequest();
xhr.open('DELETE', deleteUrl, true);
xhr.onload = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.response);
} else {
console.error(xhr.response);
}
}
xhr.send();
Natomiast po stronie serwera użyłem metody Mongoose findByIdAndRemove(), po czym za pomocą res.redirect() próbowałem przekierować na stronę główną:
Plik app/routes/index.js
app.route('/polls/:id/delete')
.delete(isLoggedIn, function(req,res) {
Polls.findByIdAndRemove(req.params.id, function(err, data) {
if(err) {
res.status(400).json({responseText: "server- Oops! Something went wrong."});
} else {
console.log("Data deleted: " + data);
res.redirect("/");
}
});
});
Niestety z jakiegoś powodu strona się nie reloaduje, widzę w narzędziach dla programisty (w zakładce Network), że strona startowa jest załadowana a jednak się nie odświeża. Z problemem poradziłem sobie dopiero poprzez przekierowanie na stronę główną po stronie klienta poprzez:
window.location.replace(redirectUrl);
Moje pytanie brzmi: dlaczego strona się nie przekierowuje za pomocą res.redirect? Początkowo myślałem, że jest to związane z metodą DELETE, bo z tego co czytałem to działa trochę inaczej niż POST i przy przekierowaniu metoda nie przestawia się automatycznie na GET, jednakże zmiana zapytania na POST także nie pomogła. Ma ktoś jakiś pomysł, wskazówki, rady, cokolwiek?
www: https://voter-fcc.herokuapp.com
github: https://github.com/frozenfroggie/voting-app