2014-07-15 10 views
12

Ich habe überall für die Suche, wie dies zu tun - ich versuche, nach einer DELETE-Anforderung erfolgt die Umleitung - hier ist der Code, den ich OHNE REDIRECT bin mit:Express.js - res.redirect nach DELETE Anfrage

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 wird aufgerufen, wenn ein Element (ein Beitrag) gelöscht wird. Alles funktioniert gut (ich musste res.send(200) verwenden, damit es nicht an der Löschanforderung hängt) - aber jetzt habe ich Probleme beim Umleiten. Wenn ich res.redirect('/forum') innerhalb der remove Funktion, wie folgt aus:

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'); 
    }); 
}; 

Es registriert die Umleitung als DELETE Anforderung, die zu löschen versucht /forum, wie folgt aus:

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

Alles, was ich versucht bin Zu tun ist die Seite aktualisieren, so dass die Liste der Beiträge nach dem Löschen aktualisiert wird. Kann jemand helfen?

+0

Ich habe das gleiche Problem mit Ihnen. Alles ist gut. Aber 'res.redirect' lädt die Seite nicht neu. – novaline

+0

@novaline - verwenden Sie auch eckig? Ich musste etwas auf meiner Frontend-Seite tun, nicht auf der Express-Seite - siehe Antwort unten. – ewizard

+0

Nein, ich benutze jQuery. Ich möchte die Seite nach Server-Seite neu laden. Es ist komisch. Das 'res.redirect' funktioniert, wenn ich die' create' Operation mache (POST, Formularaktion). Aber die 'delete' Operation (POST, $ .ajax), die' res.redirect' ist in Ordnung, ohne Fehler. Aber das Problem ist, es ist nicht die Seite aktualisieren. Ich kann das Netzwerk 'Antwort' sehen, das von der Serverseite zurückgebracht wird. – novaline

Antwort

2

Ich habe es mit $window.location.href = '/forum'; auf mein Eckige Seite arbeiten - setze sie nur in der Erfolgsfunktion des $http Anfrage, die Teil der delete Funktion ist, die ausgeführt wird, wenn die Schaltfläche „Löschen“ angeklickt wird.

+0

Und was, wenn Sie etwas löschen müssen, ohne zuerst auf einer Seite zu sein? – trysis

+0

@trysis - ist das eine Frage? Hast du ein Problem oder versuchst du etwas falsch zu machen? Es ist eine Weile her, aber für dieses Problem würde ich den Beitrag nicht löschen müssen, ohne auf die Seite zu gehen ... und wenn ich wollte, könnte ich ihn nur manuell aus der Datenbank entfernen, weil ich Admin bin ... – ewizard

+0

Oh, Es tut uns leid. Für die meisten Websites (einschließlich, nehme ich an, deins) ist das in Ordnung. Es ist nur für einige nicht so, und ich habe versucht, die Frage zu erweitern. Stört mich nicht. :) – trysis

3

Ich weiß, das Ende ist, sondern für jeden, der dies später sieht, können Sie auch die HTTP-Methode manuell zurückgesetzt zu erhalten, die auch

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

Super, gut zu wissen! – ewizard

+0

hat es nicht funktioniert –

1

@ewizard ‚s Lösung großer arbeiten soll, ist, wenn Sie beheben das am vorderen Ende. Wenn Sie jedoch auf der Rückseite Ende dieses Problem beheben möchten, können Sie einen optionalen Statuscode Argument res.redirect wie so hinzufügen:

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

Diese Umleitungen für „undefiniert Reason“, die auf eine GET Umleitung nicht nachkommt.

Weitere Informationen finden Sie unter this SO post.

Verwandte Themen