Mein Problem ist ähnlich genug zu this aber auch anders und die Antworten funktionieren nicht für mich.Nodejs Seite nicht umleiten nach POST
Ich habe ein Formular zum Posten und ich muss eine Nachricht auf der Seite anzeigen, ob es die Daten erfolgreich in die Datenbank eingegeben hat oder nicht. So habe ich:
app.post('/add_new', upload.single('image'), function add_new(req, res, err)
{
var image = req.body.image;
// do some checks and try to insert
if (err){
res.render('page_name',{images:images, message:'There was an error'})
}
else{
images.push(image);
res.render('page_name',{images:images, message: 'Success'})}
}
}
Die Fehler/Erfolg Nachrichten werden auf der Clientseite behandelt.
Mein Problem ist, dass es den Post nicht wirklich vervollständigt. Die Seite mit der Fehler-/Erfolgsmeldung wird korrekt gerendert, aber die URL sieht wie folgt aus: 'meine_seite.com/add_new'. Wenn der Benutzer die Seite aus irgendeinem Grund aktualisiert, sendet er diese 'Formular erneut senden' Warnung, was Probleme verursacht. Ich brauche es, um zu 'my_site.com' zurückzukehren und die Nachricht anzuzeigen.
Ich habe festgestellt, dass
tunres.redirect('back')
kehrt auf die richtige Seite, aber offensichtlich die Nachricht nicht angezeigt werden soll. Ich habe ein paar Antworten bemerkt empfehlen
res.end('Success')
aber das zeigt nur eine weiße Seite mit dem Wort ‚Erfolg‘ - ich weiß nicht, wie jemand das ist eine akzeptable Lösung denkt!
EDIT: Nach Vinays Antwort, mein Code lautet nun wie:
app.post('/add_new', upload.single('image'), function add_new(req, res, err)
{
var image = req.body.image;
// do some checks and try to insert
if (err){
req.session.msg='error adding';
res.redirect('page_name');
}
else{
images.push(image);
req.session.msg='success';
res.redirect('page_name');
}
}
und diese Seite zu erhalten:
app.get('/page_name', is_logged_in, function(req, res) {
if(req.session.msg){
res.render('page_name', {images: images, user:req.user, message: req.session.msg});
setTimeout(req.session.msg="", 4000);
}
else{
res.render('page_name', {images: images, user:req.user, message:''});
}
});
Aber ich finde immer noch, dass die Fehlermeldung weiterhin angezeigt wenn die Seite aktualisiert wird. Habe ich einen Fehler gemacht?
Vielen Dank für diesen Vinay.Ich habe beide Lösungen getestet und beide waren definitiv eine Verbesserung. Die zweite Lösung kommt mir am nächsten, obwohl ich es lieben würde, wenn die Fehlermeldung verschwindet, wenn der Benutzer die Seite aktualisiert. Trotzdem hast du mir sehr geholfen! – Meelah
dafür müssen Sie eine Sitzung löschen req.session.msg = ""; Also, was Sie tun können, nachdem Sie eine Seite geladen haben, können Sie nach 3 Sekunden eine Wiederholung löschen, damit die Nachricht beim nächsten Laden der Seite nicht angezeigt wird. Schau dir meine Update-Lösung an. –
Das hat bei mir nicht funktioniert. Ich habe meine Frage mit meinem neuen Code aktualisiert, daher wäre ich sehr dankbar, wenn Sie darauf hinweisen könnten, dass ich Ihre Antwort falsch interpretiert habe. – Meelah