2014-07-15 26 views
12

I zostały poszukiwania na całym jak to zrobić - Próbuję przekierować po DELETE jest wniosek - tu jest kod używam BEZ przekierowanie:ExpressJS - res.redirect po DELETE życzenie

exports.remove = function(req, res) { 
    var postId = req.params.id; 
    Post.remove({ _id: postId }, function(err) { 
    if (!err) { 
      console.log('notification!'); 
      res.send(200); 
    } 
    else { 
      console.log('error in the remove function'); 
      res.send(400); 
    } 
    }); 
}; 

remove zostaje wywołana, gdy element (post) zostanie usunięty. Wszystko działa poprawnie (musiałem użyć res.send(200), aby nie zawiesić się na żądanie usunięcia) - ale teraz mam problem z przekierowaniem. Jeśli używam res.redirect('/forum') wewnątrz funkcji remove, tak:

exports.remove = function(req, res) { 
    var postId = req.params.id; 
    Post.remove({ _id: postId }, function(err) { 
    if (!err) { 
      console.log('notification!'); 
      res.send(200); 
    } 
    else { 
      console.log('error in the remove function'); 
      res.send(400); 
    } 
    res.redirect('/forum'); 
    }); 
}; 

Rejestruje przekierowanie jako żądanie DELETE że próbuje usunąć /forum coś takiego:

DELETE http://localhost:9000/forum 404 Not Found 4ms

All próbuję należy odświeżyć stronę, aby lista wpisów była aktualizowana po usunięciu. Czy ktoś może pomóc?

+0

Mam taki sam problem z tobą. Wszystko w porządku. Ale 'res.redirect' nie przeładuje strony. – novaline

+0

@nowalina - czy używasz również kątowego? Skończyło się na tym, że musiałem coś zrobić na mojej stronie frontendowej, a nie na stronie ekspresowej - patrz odpowiedź poniżej. – ewizard

+0

nie, używam jQuery. Chcę ponownie załadować stronę po stronie serwera. To dziwne. 'Res.redirect' działa kiedy wykonuję operację' create' (POST, akcja formularza). Ale operacja 'delete' (POST, $ .ajax),' res.redirect' jest w porządku, bez błędu. Ale problem polega na tym, że nie odświeża strony. Widzę sieć 'response' zwróconą od strony serwera. – novaline

Odpowiedz

2

mam to działa na mojej stronie kątowy z $window.location.href = '/forum'; - wystarczy umieścić go w funkcji sukcesu wniosku $http który jest częścią funkcji delete który zostanie wykonany gdy „Usuń” kliknięciu przycisku.

+0

A co, jeśli musisz usunąć coś, nie będąc na pierwszej stronie? – trysis

+0

@trysis - czy to jest pytanie? Czy masz problem lub próbujesz wskazać coś, co zrobiłem źle? Minęło trochę czasu, ale dla tego problemu nie musiałbym usuwać postu bez wchodzenia na stronę ... a gdybym chciał, mógłbym usunąć go z bazy danych bardziej ręcznie, ponieważ jestem administratorem ... – ewizard

+0

Oh, Przepraszam. W przypadku większości witryn (w tym, jak zakładam, twoja) jest to w porządku. To tylko dla niektórych, a ja starałem się, aby pytanie było szersze. Nie przejmuj się mną. :) – trysis

3

Wiem, że to późno, ale dla każdego, kto widzi to później, można również ręcznie zresetować metodę HTTP dostać które powinny również działać

exports.remove = function(req, res) { 
    var postId = req.params.id; 
    Post.remove({ _id: postId }, function(err) { 
    if (!err) { 
      console.log('notification!'); 
      res.send(200); 
    } 
    else { 
      console.log('error in the remove function'); 
      res.send(400); 
    } 

    //Set HTTP method to GET 
    req.method = 'GET' 

    res.redirect('/forum'); 
    }); 
}; 
+0

Niesamowite, dobrze wiedzieć! – ewizard

+0

to nie działa –

1

rozwiązanie @ewizard „s jest wspaniale, gdyby można naprawić to z przodu. Jednakże, jeśli chcesz naprawić to na tylnym końcu, można dodać opcjonalny argument kod statusu do res.redirect tak:

res.redirect(303, "/forum");

ten przekierowuje do „Undefined Reason”, który będzie domyślnie przekierowanie GET.

Aby uzyskać więcej informacji, zobacz this SO post.