2016-12-09 9 views
1

私の角度1.5.8ウェブアプリケーションはhttp://www.example.com/foo/にあり、私のRESTfulバーのリストはhttp://www.example.com/foo/api/barsです。 ui-routerがAngularの棒のリストに行くと、私のブラウザはhttp://www.example.com/foo/#/barsになります。 HTTP GETを使用してhttp://www.example.com/foo/api/barsに接続するRESTfulなリソースに接続したいだけです。

だから私は、最も明白なことしてみてください:右、私http://www.example.com/foo/api/barを与えるために、現在のパスhttp://www.example.com/foo/#/barsapi/bars/を解決する必要があり、私の心の中で

$resource("api/bars/") 

を?しかし、それは動作しません(私はそれが$httpと働いたことを誓うことができますが)。代わりに、それは私に$resource:badcfgエラーを与える。

角度が、私は次のことを行うことができますが、これは代わりに私にhttp://www.example.com/api/barsを与え、正しいパスを生成しません:

$resource("/api/bars/") 

ので(なぜ私が$browser.baseHref()を試してみてください、それが空の文字列に設定されているようです?)、http://www.example.com/api/barsを再度作ります。

$resource($browser.baseHref() + "/api/bars/") 

は私が $location.path()を使用しようとしましたが、それは動作しませんので、角度は私にを与えて、私はハッシュ記号後のパス をしたいと考えています。ドー!

$resource($location.path() + "/api/bars/") 

どのように私は単にhttp://www.example.com/foo/api/bars(あるいは単にパス)の製造、現在のURL http://www.example.com/foo/#/barsのベースパスにapi/bars/を解決することができますか?

ではなく、絶対パスをハードコードしたり、HTMLコードを変更したりすることができます。です。どして私がこんな事に?さらに、このアプリケーションは同じサーバー上の2か所にマウントされます(Java、Tomcat、JAX-RSの場合は簡単です)。http://www.example.com/foo/http://www.example.com/foo-demo/です。アプリケーションは、それぞれの場所で変更されずに実行し、バーのRESTful APIリストにはそれぞれとhttp://www.example.com/foo-demo/api/barsにアクセスする必要があります。

これは複雑ではありません。これは20年以上にわたりRFCで概説されている単純な「URI構文101」です。 api/bars/を現在のURLの基本パスhttp://www.example.com/foo/#/barsに解決したいだけです。 Angular 1.5ではどうしたらいいですか?

答えて

1

OK、これを行うには2通りの方法があります。あなたは絶対に、絶対パスをしたい場合は、これを使用することができます:

$resource(location.origin + location.pathname + "api/bars/") 

locationオブジェクトlocation.originの使用は、プロトコル、ドメイン、およびポートを確立します。ベースパスを確立するためにlocation.pathnameを使用します。 (Microsoftは、Windows 10のいくつかのバージョンでIE11上のlocation.origindoesn't workを再びレンチをスローします。)

しかし、より良いアプローチを使用することです:

$resource("api/bars") 

「待って、私はあなたがこれはあなたにエラーを与えるだろうと言ったと思いました!」あなたは叫ぶかもしれません。それは間違っていたことが分かりました。実際にはエラーが発生しましたが、AcceptヘッダーにJSONを要求するように設定していなかったため、$resourceが混乱していました(plain/textレスポンスがRESTfulリソースのデフォルトです)。結局のところ、相対URIが動作することが判明しました。

+0

これは問題ありません。また、配列対オブジェクトの問題だけでなく、受信したエラーの原因になるという貴重な情報もあります。 –

1

$resourceには$httpと使用できるので、$resourceで使用される相対パス構文を使用できます。スラッシュを省略したり、リソースの先頭に./という接頭辞を付けたりすることで、これを行うことができます。

お客様のbadcfgのエラーは、リクエストが正しく機能するが、サーバーの応答が期待通りでないために発生する可能性が高いようです。おそらく、配列の代わりに単一のオブジェクトを返すでしょう。 devツールを使用して、実際にサーバから返されたものをデバッグしてください。

詳細については、docs on $resourceを参照してください。

+0

あなたはすべての点数が正しかったですが、あなたが私の入力と同じようにあなたの答えを入力したように見えるので、あなたは私の投稿を見ませんでした。 2分早く、あなたは私にそれを打つだろう。 ;)私はあなたがすべての仕事に行きましたので、私はまだ正しい答えとしてあなたの印を付けるでしょうが、私の答えは絶対的な、解決された道を作るための解決策に留意します。あなたの正確で有能な応答に考えを入れてくれてありがとう。 –

関連する問題