2

NodeJs で AngularJs を使用しています。

HTTP POST リクエストが成功したときに、ユーザーをリダイレクトする必要があるシナリオがあります。

クライアントで AngularJS を介して、ルートに HTTP POST リクエストを送信します。

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

このルートは、実際の POST を実行する NodeJ 内で処理されます。成功すると、ルート ハンドラー内で次のようにリダイレクトします。

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 リクエストのエラー ハンドラによって選択されていることがわかりました。

サーバーがリダイレクトコードを正常に実行したときに、コントロールがまだクライアントに到達し、それもエラーハンドラーに到達する理由がわかりません。正常にリダイレクトするにはどうすればよいですか?

4

2 に答える 2

3

angular または 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');
    }
})
于 2013-09-04T15:32:28.423 に答える
0

成功した XHR は 200 のステータスで返されます。サーバーが 302 を返すのは技術的には正しいですが、Angular の $http が期待するものではありません。サーバーが 200 を返すことができる場合は、$http 要求の .success 関数でリダイレクトを行うことができます。

于 2013-09-04T15:21:23.883 に答える