重定向到外部URL

时间:2013-09-04 15:15:37

标签: node.js redirect angularjs

我在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请求的错误处理程序选中。

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

2 个答案:

答案 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函数中进行重定向。