Angular ресурсная служба не потребляет службу отдыха в рельсах (формат Json)

Я разрабатываю веб-приложение, в котором у меня есть интерфейс, построенный с помощью AngularJS, который использует службы Rest Services, предоставляемые внутренним API-интерфейсом API Rails.

Я хотел бы использовать ресурс Angular $, чтобы получить объекты Json в интерфейсном API.

Клиентские и серверные приложения работают на разных серверах. Таким образом, клиент Angular находится в серверном пути: приложение 1234/app и backend api запускается на пути другого сервера: 3000/.

Если путь к серверу и другому серверу - это localhost.

Обе стороны разрабатываются и работают независимо. Я имею в виду:

  • Когда я запускаю другой-серверный путь: 3000/лодки в браузере, я получаю список лодок, поэтому служба Restful выглядит как работающая.
  • Я сделал симуляцию на стороне клиента, поэтому в своей службе я заменил реальный url симулированным URL-адресом на источник данных json. Этот код также работает.

Теперь я хочу вызвать backend restful service на пути другого сервера: 3000/шлюзы из службы Angular, но теперь он показывает любые данные, и я не вижу запроса на получение в журналах серверов.

Это мой служебный код 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}
 });

});

и это мой контроллер backend rails:

def index
 @boats = Boat.all
 respond_to do |format|
 format.html
 format.xml { render :xml => @boats}
 format.json { render :json => @boats}
 end
end

Что мне не хватает? Пожалуйста, помогите.

UPDATE: В приложении 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. Контроллер также выполнен. Я получил лодки из БД. Однако я не могу отправить их обратно в 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)
</boat:0x000000089e6e40></boat:0x000000089e71b0></boat:0x000000089e74a8></boat:0x0000000675d9f0>

Как вы можете видеть, во-первых, он говорит, что он обрабатывается как HTML вместо JSON. Второй он не отправлен на Angular назад.

1 ответ

Я заработает!

Я настраиваю свой Rails api для принятия междоменного запроса, помещая эту конфигурацию в config/application.rb

config.action_dispatch.default_headers = {
 'Access-Control-Allow-Origin' => '*',
 'Access-Control-Request-Method' => '*'
}

мой служебный файл с вызовом ресурса:

factory('Boat', function($resource){ 
 return $resource('http://127.0.0.1\\:3000/:boatId', {}, { 
 query: {method:'GET', params:{boatId:'boats'}, isArray:true}
 });
}).

и мой контроллер API Rails:

def index
 @boats = Boat.all
 puts @boats
 render :json => @boats 
end

Это выглядит просто, но эта комбинация заняла у меня три дня.

licensed under cc by-sa 3.0 with attribution.