POST后,Nodejs页面不会重定向

时间:2016-05-25 12:05:38

标签: javascript node.js forms

我的问题与this类似,但也有所不同,答案对我不起作用。

我有一个要发布的表单,我需要在页面上显示一条消息,无论它是否成功地将数据输入数据库。所以我有:

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'”,如果用户因任何原因刷新页面,它会发送该表单重新提交&# 39;警报,这会导致问题。我需要它回到' 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:''});
    }
});

但我仍然发现刷新页面时错误消息仍然存在。我犯了错误吗?

1 个答案:

答案 0 :(得分:1)

目前你正在这样做

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

你可以使用其中一个。