2

我正在使用 AngularJs 和 NodeJs。

我有一个场景,当 HTTP POST 请求成功时,我需要重定向用户。

在通过 AngularJS 的客户端中,我向路由发出 HTTP POST 请求:

$http.post('/aPath', data)
    .success(function (result) {
        //Handle success
    })
    .error(function (err) {
        //Handle error
    });

该路由在 NodeJs 中处理,然后执行实际的 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 请求的错误处理程序选择。

我不知道为什么,当服务器成功执行重定向代码时,控件仍然到达客户端,错误处理程序也是如此。如何成功重定向?

4

2 回答 2

3

它是 Angular 的 HTTP POST 还是 XHR?如果它是 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');
    }
})
于 2013-09-04T15:32:28.423 回答
0

成功的 XHR 以 200 的状态返回。您的服务器返回 302 在技术上是正确的,但这不是 Angular 中的 $http 所期望的。如果您的服务器可以给您一个 200,那么您可以在 $http 请求的 .success 函数中进行重定向。

于 2013-09-04T15:21:23.883 回答