2013-05-18 6 views
11

私はAPIとしてExpressjsを使用しています。私はそのPOSTにヒットするためにangleを使用しています。私は急行が送信しているリダイレクトに応答したいと思います。 Angular POSTの成功は、リダイレクトしようとしているページのHTMLを返しますが、DOMでは何も起こりません。リダイレクトがネットワークトラフィックで動作しており、そのconsole.logデータにはリダイレクトされたページのDOMが含まれていることがわかります。Angular POSTからエクスプレスリダイレクトを処理します。

DOMをリフレッシュして、この成功したPOSTを反映したり、 "リダイレクト"を処理するにはどうすればよいですか?

アンギュラCODE:

$http({method: 'POST', url: '/login', data:FormData}). 
     success(function(data, status, headers, config) { 
     console.log(data) 
    }). 
     error(function(data, status, headers, config) { 
    }); 

    $scope.userName = ''; 

Expressjs API:

app.post('/login', function(req, res){ 

     var name = req.param('name', null); // second parameter is default 
    var password = req.param('password', "changeme") 

    // Lots Authenticationcode 
    // returns succesfful login 
    res.redirect('http://localhost:3000/'); 

    }); // end app.post 

にconsole.log(データ)(角POSTの成功から)

returns the HTML of the page I intended to redirect to 

答えて

14

AngularJSはとして機能するためのものですクライアント側のフレームワークと(ほとんど)RESTfull APIが結合されています。あなたのログインAPIはHTMLを返すものではないので、をリダイレクトするための命令を返すことになっています。だからあなたの場合は成功コールバックで$location.url('/')と呼ぶべきです。角度ルータは「/」(ルートURL)に「リダイレクト」します。

+0

「リダイレクトする命令」をどのように角度で検出しますか? Expressを使用したオペレーションの例では、Angularはサーバーからres.redirect( '/')を検出する何らかの方法を公開していますか? – Matt

+0

これは開発者の責任ですが、ほとんどの場合、状態コード200(成功)または201(作成済み)を返すことをお勧めします。この場合、 '$ location.url( '/')'呼び出しを '$ http '成功コールバック。 – Stewie

+3

私は伝統的な

res.redirectが動作するデータを投稿する方法をどのように模倣できますか? – OMGPOP

関連する問題