バックエンドAPI Railsアプリケーションによって提供されるRest Servicesを消費するAngularJSで構築されたフロントエンドを持つWebアプリケーションを開発しています。
Angular $resource を使用して、バックエンド API で Json オブジェクトを取得したいと考えています。
これまでのところ、クライアント アプリケーションとサーバー アプリケーションは異なるサーバーで実行されます。したがって、Angular クライアントは server-path:1234/app にあり、バックエンド API アプリケーションは another-server-path:3000/ で実行されます。
server-path と another-server-path は localhost です。
両側が開発され、独立して動作します。つまり:
- ブラウザーで another-server-path:3000/boats を実行すると、ボートのリストが表示されるので、Restful サービスが機能しているように見えます。
- クライアント側でシミュレーションを行ったので、私のサービスでは、実際の URL を json データ ソースへのシミュレートされた URL に置き換えました。このコードも機能します。
ここで、angular サービスから another-server-path:3000/boats にあるバックエンドの restful サービスを呼び出したいのですが、データが表示されており、サーバー ログに get リクエストも表示されません。
これは私のAngularサービスコードです:
angular.module('myApp.services', ['ngResource']).
// value('version', '0.1');
factory('Boat', function($resource){
return $resource('another-server-path:3000/:boatId', {}, {
query: {method:'GET', params:{boatId:'boats'}, isArray:true}
});
});
これは私のバックエンド Rails コントローラーです。
def index
@boats = Boat.all
respond_to do |format|
format.html
format.xml { render :xml => @boats}
format.json { render :json => @boats}
end
end
私は何が欠けていますか?助けてください。
更新: Angular アプリで、サービス ファイルを次のように変更しました。
return $resource('another-server-path\\:3000/:boatId', {}, {
query: {method:'GET', params:{boatId:'boats'}, isArray:true}
また、次の行を app.js ファイルに追加しました。
delete $httpProvider.defaults.headers.common["X-Requested-With"];
そして今、APIサーバーでリクエストを受け取りました。コントローラも実行されます。DBからボートを入手しました。ただし、それらを JSON で Angular に送り返すことはできません。
これは私のAPIコントローラーです:
def index
@boats = Boat.all
puts @boats
render :json => @boats
end
これは、呼び出されたときに取得したログです。
Started GET "/boats" for 127.0.0.1 at 2013-09-26 17:05:49 +0200
Processing by BoatsController#index as HTML
Boat Load (2.0ms) SELECT `boats`.* FROM `boats`
#<Boat:0x0000000675d9f0>
#<Boat:0x000000089e74a8>
#<Boat:0x000000089e71b0>
#<Boat:0x000000089e6e40>
Completed 200 OK in 66ms (Views: 3.0ms | ActiveRecord: 7.0ms)
ご覧のとおり、まず、JSON ではなく HTML として処理されたと表示されます。Angular に送信されない秒。