【问题标题】:Redirecting POST to GET after Database Addition添加数据库后将 POST 重定向到 GET
【发布时间】:2015-10-02 23:42:05
【问题描述】:

我正在使用 Mongoose 和 Express.js 。

我的 Post 请求如下所示:

$('#update').on('click', function() {

        var uname = $('#username').val();
        var name = $('#name').val();
        var json = {
            user_name: name,
            user_username: uname,
        };
        $.post("/saveprofile", json, function(data, error, xhr) { 
          if(!err)   
            window.location.href = "/feed";       
        });
    });

这就是我处理请求的方式:

app.post('/saveprofile', isLoggedIn, function(req, res)  {

    var username = req.body.user_username; 
    var uname = req.body.user_name;

   User.findOne({$or:[{"facebook.email":req.user.facebook.email},{"local.email":req.user.local.email}]}, function (err, user){
      user.name = uname;
      user.username=username;
      user.save();
      res.send({redirect: '/feed'});
})
});

我的文档已成功添加到数据库中,但我想要的是,当发生这种情况时,它应该重定向到新页面 /feed 。上面的 sn-ps 提到了我尝试过的两种方法。但我没有结果。它不会重定向!

编辑:

带有异常处理的测试给出undefined

app.post('/saveprofile', isLoggedIn, function(req, res)  {

    var username = req.body.user_username; 
    var uname = req.body.user_name;
try{
   User.findOne({$or:[{"facebook.email":req.user.facebook.email},{"local.email":req.user.local.email}]}, function (err, user){
      user.name = uname;
      user.username=username;
      user.save();
      res.redirect("http://stackoverflow.com")
  });
 }
 catch(ex){
  console.log(ex) ;
 }
});

编辑 2: 我尝试了一个示例请求......即使它似乎没有重定向!

app.post('/test', isLoggedIn, function(req,res){
    res.redirect("http://www.stackoverflow.com")
})

【问题讨论】:

  • 尝试将res.send({redirect: '/feed'}); 替换为res.redirect('http://stackoverflow.com');。你会被重定向到 so 吗?
  • 顺便说一句,您的数据更新了吗?这可能是两个重定向失败的唯一原因。
  • 数据正在更新..是的!重定向不起作用!
  • 尝试用 try..catch 将 findOne 包围为 try { //findOneCode } catch (ex) {console.log(ex)}。查看服务器控制台中弹出的任何内容。
  • 它给了undefined

标签: node.js express mongoose


【解决方案1】:

您不能在 AJAX 之后进行重定向。您需要使用 Javascript 来完成

所以我们可以这样做,

发布请求:

$('#update').on('click', function() {
        var uname = $('#username').val();
        var name = $('#name').val();
        var json = {
            user_name: name,
            user_username: uname,
        };
        $.post("/saveprofile", json, function(data, err, xhr) { 
          if(!err)   
            window.location.href = data.redirect;       
        });
    });

服务器

app.post('/saveprofile', isLoggedIn, function(req, res)  {

    var username = req.body.user_username; 
    var uname = req.body.user_name;

   User.findOne({$or:[{"facebook.email":req.user.facebook.email},{"local.email":req.user.local.email}]}, function (err, user){
      user.name = uname;
      user.username=username;
      user.save(function(err){
          if(!err)
              res.send({redirect: '/feed'});
    });
})
});

Link to Original Answer

【讨论】:

  • 这似乎令人印象深刻。但是它仍然没有重定向!
  • 尝试将 user.save 的 prinitng err 打印到控制台。
  • 男人!生病关闭这个。我受够了 。没有错误!哈哈 !感谢您的帮助!
  • 如果没有错误,那么你应该已经被重定向了。好的,我会停下来。总帐
【解决方案2】:

改用res.redirect()

res.redirect("/feed");

【讨论】:

  • 我不知道是不是因为您没有发布所有代码,但看起来您缺少右括号和括号,尝试修复它?
  • 已编辑!我忘了在 sn-p 中粘贴括号
  • 顺便说一句,为什么客户端 JS 不工作!想不通
  • 你检查过你的浏览器控制台吗?您正在检查 err 是否存在,但在定义函数时已将其称为 error
  • 更正拼写错误后控制台为空。仍然没有重定向!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
  • 2010-10-08
  • 2017-07-02
  • 2016-09-15
  • 2012-12-24
  • 1970-01-01
相关资源
最近更新 更多