我在NodeJs中使用AngularJs。
我有一个场景,当成功的HTTP POST请求时,我需要重定向用户。
在客户端通过AngularJS,我向路由发出HTTP POST请求:
$http.post('/aPath', data)
.success(function (result) {
//Handle success
})
.error(function (err) {
//Handle error
});
此路由在NodeJ中处理,然后执行实际的POST。成功后,在路由处理程序中,我重定向:
function handlePostRequest (req, res) {
//Route handler
//HTTP POST Request
//Following code called when POST request is successful
if (result) {
//Successful post
res.redirect("http://www.google.com");
}
}
但是,浏览器无法导航到谷歌。相反,在AngularJS客户端中的POST请求的错误处理程序中,到达控件。
我检查了服务器,发现POST请求作为状态代码302返回,因此被客户端POST请求的错误处理程序选中。
我无法弄清楚为什么当服务器成功执行重定向代码时,控件仍然到达客户端,而错误处理程序也是如此。如何成功重定向?
答案 0 :(得分:3)
是角度还是XHR的HTTP POST?如果它是XHR,您无法从服务器端重定向客户端,则需要发回一个错误,然后在客户端脚本中处理该错误,例如:
$http({
method: 'POST',
url: 'yoururl',
}).success(function(data, status, headers, config) {
// success stuff
}).error(function(data, status, headers, config) {
if (status == 302) {
window.location = headers('Location');
}
})
答案 1 :(得分:0)
成功的XHR返回状态为200.您的服务器交回302在技术上是正确的,但它不是Angular预期的$ http。如果您的服务器可以为您提供200,那么您可以在$ http请求的.success函数中进行重定向。