2013-09-04 10 views
2

NodeJ와 함께 AngularJs를 사용하고 있습니다.외부 URL로 리디렉션

성공적인 HTTP POST 요청시 사용자를 리디렉션해야 할 때가 있습니다.

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

가이 경로는 다음 실제 POST를 수행 NodeJs 내에서 처리됩니다 AngularJS와를 통해 클라이언트의

, 나는 경로에 HTTP 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"); 
    } 
} 

그러나 브라우저는 Google로 이동하지 않습니다. 대신 AngularJS 클라이언트 내의 POST 요청의 오류 처리기에서 제어에 도달합니다.

서버를 검사하여 POST 요청이 상태 코드 302로 반환되고 클라이언트의 POST 요청에 대한 오류 처리기에 의해 선택되었음을 확인했습니다.

서버가 리디렉션 코드를 성공적으로 실행하면 컨트롤이 여전히 클라이언트에 도달하고 그 역시 오류 처리기에 도달하는 이유를 알 수 없습니다. 성공적으로 리디렉션하려면 어떻게해야합니까?

답변

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

오 대단한 멋진 편집, 생각하지 못했습니다. 헤더() 사용 –

+0

그것의 HTTP 포스트. 같은 것을 반영하도록 코드를 편집했습니다. 나는 서버가 리다이렉트 할 것을 기대하고있다. 그렇지 않다면, 나는 "에러 핸들러에서 http 응답 상태를 확인하라"접근법을 취할 것이다.이 접근법으로 리디렉션 할 URL을 아는 것이 가능 할까? 리디렉션 URL을 하드 코딩하지 않고 가능한 경우 서버의 응답에서 읽으려고합니까? – callmekatootie

+0

아 ... 지금 편집 된 답변을 보았습니다. 'headers ('Location ')'는 서버가 리디렉션하려고 시도한 위치로 리디렉션하고 수정합니까? – callmekatootie

0

성공한 XHR은 200의 상태로 돌아옵니다. 302를 돌려주는 서버는 기술적으로 정확하지만 Angular의 $ http가 기대하는 것은 아닙니다. 서버에서 200을 넘길 수 있다면 $ http 요청의 .success 함수에서 리디렉션을 수행 할 수 있습니다.