0

PhoneGap + AngularJS (クライアント) --- ExpressJS + MongoDB (サーバー) を使用して構築されたアプリがあります。アプリは、Ubuntu マシン上の Amazon EC2 でホストされています。アプリは完全に正常に機能していましたが、...

EC2 マシンで次のことを行いました。

sudo apt-get update

これを行った後、アプリで Cross Origin 共有エラーが発生し始めました (Chrome のコンソールを見てください)。私の AngularJS アプリには、次のようなコードがあり、エラーがスローされていました。

$http.get('http://amazon.ec2.foo/offers').success(function(data) { });

エラーは次のとおりです。

XMLHttprequest doesn’t allow Cross-Origin Resource Sharing on http://localhost:8000

したがって、サーバーアプリを次のように更新しました。

app.all("/api/*", function(req, res, next) {
      res.header("Access-Control-Allow-Origin", "*");
      res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With");
      res.header("Access-Control-Allow-Methods", "GET, PUT, POST, OPTIONS");
      return next();
});

これは最初は問題ないように思えました。Cross Origin エラーが発生しなくなり、コンソールで http 要求からの応答を確認できました。ただし、応答をコンソールに出力した直後にアプリが応答を停止し、ハングしているように見えます。Web ページのどの部分をクリックしても、開発者コンソールを開くこともできません。それを開く。Chrome の他のタブはまったく問題ありませんでした。

これをしばらくデバッグした後、以前は (これらのアプリヘッダーなしで) サーバーから HTTP 200 を取得していたことがわかりましたが、現在は HTTP 304 (NOT MODIFIED) を取得しており、Angular が次のように扱っているようですエラー。

タブで約 2 分間待機すると、Web ページが http 要求から受信したデータをロードする結果になることがわかりましたが、Web ページは応答しません。

これを AngularJS が HTTP 304 で何か奇妙なことを行っていることに絞り込むために、いくつかのことを確認しました。

  • 同じエラーでこれをローカルホストで実行しています。したがって、EC2 とは関係ありません。
  • 簡単なデータを送り返すためにmongodbを削除しました。つまり、Mongoとは何の関係もありません。
  • これを単純なサーバーとして Chrome で実行しているため、問題となる PhoneGap を排除しました。

誰かがこれを前に見たことがありますか / 問題が何であるか、どうすれば解決できるか知っていますか?

ありがとう!

4

1 に答える 1

0

Angular は 304 ステータス コードを失敗として扱い、304 (未テスト) をキャッチします。

var prom = $http.get('http://amazon.ec2.foo/offers')
.catch(function(resp){
    if(resp.status !== 304){ $q.reject(resp) }
    return resp;   // response 
})
.catch(function(err){
    // handle or throw error
});

// Success responses and 304 responses are now available through the $http promise
prom.then( function(resp){ /* handle 200 and 304 response */ } );
于 2014-02-13T12:28:52.957 に答える