簡體   English   中英

POST后Nodejs頁面未重定向

[英]Nodejs page not redirecting after POST

我的問題與相似,但又有所不同,答案對我沒有用。

我有一個要發布的表單,無論頁面是否成功將數據輸入數據庫,我都需要在頁面上顯示一條消息。 所以我有:

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

錯誤/成功消息在客戶端處理。

我的問題是,它實際上並未完成發布。 它正確顯示了帶有錯誤/成功消息的頁面,但URL看起來像“ my_site.com/add_new”,並且如果用戶出於任何原因刷新頁面,則會發送“重新提交表單”警報,從而導致問題。 我需要它返回“ my_site.com”並顯示消息。

我發現這樣做

res.redirect('back') 

返回正確的頁面,但顯然不顯示該消息。 我注意到一些建議的答案

res.end('Success') 

但這只會顯示帶有“成功”字樣的白頁-我不知道有人認為這是可以接受的解決方案!

編輯:按照Vinay的回答,我的代碼現在顯示為:

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

這得到頁面:

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

但是我仍然發現刷新頁面后錯誤消息仍然存在。 我做錯了嗎?

目前您正在執行此操作

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

您將這樣的網址發送到“ my_site.com/add_new”, 這是正確的呈現方式, 意味着您正在將html頁面加載/呈現到特定的路由“ / add_new”。

可能有兩個解決方案

第一種解決方案

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

和主頁上

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

第二解決方案

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

在首頁上您可以這樣做。

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.
  };

您可以使用其中之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM