2016-05-25 14 views
0

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

tun
res.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?

Antwort

1

derzeit tun Sie das

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

Sie bekommen URL wie diese zu ‚my_site.com/add_new‘ sind, die Rendering korrekt ist bedeutet, dass Ihr laden/HTML-Seite auf bestimmte Route zu machen, die ist '/neue hinzufügen'.

Es kann eine Lösung zwei

erste Lösung

res.redirect('/?msg=' + string); 

und auf der Startseite

app.get('/', function(req, res){ 
    if(req.query.msg){ 
     // display error message 
    }else{ 
     // else do not display error 
    } 
}); 

zweite Lösung

req.session.msg = "message here"; 
res.redirect('/'); 

und auf der Homepage können Sie so tun.

if(req.session.msg){ 
    //display error message here 
    // after displaying msg in that last this 
    setTimeout(req.session.msg="", 3000); // this will clear a session after 3 seconds, so next time it will not display the msg. 
    } else { 
    //or display home page without error. 
    }; 

können Sie einen von ihnen verwenden.

+0

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

+0

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. –

+0

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