saruftw
saruftw

Reputation: 1174

Redirecting POST to GET after Database Addition

I am using Mongoose and Express.js .

My Post request looks like this :

$('#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";       
        });
    });

This is how I'm handling the request :

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

My documents get added into the db successfully but what I want is, when that happens it should redirect to a new page /feed . The above snippets mention 2 methods I've tried. But I've got no result . It doesn't redirect !

Edit:

Testing with exception handling gives 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) ;
 }
});

Edit 2 : I tried a sample request ...even it doesn't seem to redirect !

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

Upvotes: 0

Views: 77

Answers (2)

Gaurav Gandhi
Gaurav Gandhi

Reputation: 3201

You can't make a redirection after an AJAX. You need to do it with Javascript.

So here is how we can do it,

Post request :

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

Server

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

Upvotes: 1

Drown
Drown

Reputation: 5982

Try res.redirect() instead :

res.redirect("/feed");

Upvotes: 0

Related Questions