【问题标题】:Nodejs page not redirecting after POSTPOST后Nodejs页面未重定向
【发布时间】:2016-05-25 12:05:37
【问题描述】:

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

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

【问题讨论】:

    标签: javascript node.js forms


    【解决方案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'})}
    }
    

    您将这样的 url 获取到“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.
      };
    

    你可以使用其中之一。

    【讨论】:

    • 非常感谢这个 Vinay。我尝试了这两种解决方案,两者都绝对是一种改进。第二种解决方案最接近我的需要,但如果用户刷新页面时错误消息会消失,我会很高兴。尽管如此,你还是帮了我很多忙!
    • 为此您需要清除会话 req.session.msg = "";因此,您可以在加载页面后执行哪些操作,您可以在 3 秒后清除一个视图,因此如果页面重新加载,下次将不会显示消息。查看我的更新解决方案。
    • 这对我不起作用。我已经用我的新代码更新了我的问题,所以如果你能指出我是否误解了你的答案,我将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    相关资源
    最近更新 更多