Friday, 3 June 2016

angularjs - Express redirect sending page as data to success of angular $http instead of redirecting to the page




When the user is validated the client get the page contents of home.html in result instead of redirecting to the home.html.




Client side call:



$http({
method: "post",
url: "http://localhost:2222/validateUser",
data: {
username: $scope.username,
password: $scope.password
}


}).then(function (result) {
if (result.data && result.data.length) {
alert('User validated');
} else {
alert('invalid user');
}
});



Server side controller method:



module.exports.validateUser = function (req, res) {
User.find({ 'username': req.body.username, 'password': req.body.password }, function (err, result) {
if (result.length) {
req.session.user = result[0]._doc;
res.redirect('/home');
}else{
res.json(result);
}

});
};


Route in app.js:



app.get('/home', function (req, res) {
var path = require('path');
res.sendFile(path.resolve('server/views/home.html'));
});


Answer



You could move your redirect logic to the client.



Client:



$http({
method: "post",
url: "http://localhost:2222/validateUser",
data: {

username: $scope.username,
password: $scope.password
},
}).then(function (result) {
alert('user validated');
window.location.replace('/home');
}).catch(function(result) {
alert('login failed');
});



Server:



module.exports.validateUser = function (req, res) {
User.find({ 'username': req.body.username, 'password': req.body.password }, function (err, result) {
if (result.length) {
req.session.user = result[0]._doc;
res.send('OK');
} else {
// responding with a non-20x or 30x response code will cause the promise to fail on the client.

res.status(401).json(result);
}
});
};

No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...