数据库添加后将POST重定向到GET

时间:2015-10-02 12:22:54

标签: node.js express mongoose

我正在使用Mongoose和Express.js。

我的帖子请求如下:

$('#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。上面的代码段提到了我尝试过的两种方法。但我没有结果。它没有重定向!

编辑:

使用异常处理进行测试会得到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")
})

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

请尝试res.redirect()

res.redirect("/feed");