2014-07-15 14 views
12

ho cercato dappertutto come fare questo - sto cercando di reindirizzare dopo una richiesta di eliminazione è fatto - ecco il codice che sto usando SENZA REDIRECT:ExpressJS - res.redirect dopo richiesta di eliminazione

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 viene chiamato quando un elemento (un post) viene eliminato. Funziona tutto bene (ho dovuto usare res.send(200) per ottenere che non si blocchi sulla richiesta di cancellazione) - ma ora ho problemi a reindirizzare. Se uso res.redirect('/forum') all'interno della funzione remove, in questo modo:

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

Si registra il reindirizzamento come una richiesta DELETE che sta cercando di eliminare /forum, in questo modo:

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

Tutto quello che sto cercando è necessario aggiornare la pagina in modo che l'elenco dei post venga aggiornato dopo l'eliminazione. Qualcuno può aiutare?

+0

Ho lo stesso problema con te. Va tutto bene. Ma 'res.redirect' non ricarica la pagina. – novaline

+0

@novaline - stai usando anche l'angolare? Ho finito per dover fare qualcosa sul mio frontend lato, non il lato espresso - vedi risposta sotto. – ewizard

+0

no, io uso jQuery. Voglio ricaricare la pagina dal lato server. È strano. 'Res.redirect' funziona quando eseguo l'operazione' create' (POST, form action). Ma l'operazione 'delete' (POST, $ .ajax),' res.redirect' va bene, senza errori. Ma il problema è che non si aggiorna la pagina. Riesco a vedere la rete 'response' restituita dal lato server. – novaline

risposta

2

ho preso a lavorare sul mio lato angolare con $window.location.href = '/forum'; - appena messo in funzione il successo della richiesta $http che fa parte della funzione delete che viene eseguito quando il pulsante "Elimina" viene cliccato.

+0

E se fosse necessario eliminare qualcosa senza essere prima su una pagina? – trysis

+0

@trysis - questa è una domanda? hai un problema o stai cercando di indicare qualcosa che ho fatto di sbagliato? È passato un po 'di tempo ma per questo problema non avrei bisogno di cancellare il post senza andare alla pagina ... e se volessi potrei semplicemente rimuoverlo dal database più manualmente perché sono admin ... – ewizard

+0

Oh, scusa. Per la maggior parte dei siti web (compresi, presumo, i tuoi) va bene. È solo per alcuni che non lo farebbe, e stavo cercando di allargare la domanda. Non preoccuparti di me. :) – trysis

3

So che questo è in ritardo, ma per chi vede questo più tardi, è anche possibile reimpostare manualmente il metodo HTTP GET, che dovrebbe funzionare anche

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

Fantastico, buono a sapersi! – ewizard

+0

non ha funzionato –

1

soluzione s' @ewizard è grande se è possibile risolvere questo sul front-end. Tuttavia, se si vuole risolvere il problema sul back-end, è possibile aggiungere un argomento codice di stato opzionale per res.redirect in questo modo:

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

Questo reindirizza per "La ragione non definita" che per default un reindirizzamento GET.

Vedere this SO post per ulteriori informazioni.

Problemi correlati