ActionController :: UnknownFormat в запросе API-интерфейса rails с JavaScript Front-end - PullRequest
0 голосов
/ 11 апреля 2020

SPA html / JavaScript Приложение Rails с json API BackEnd для передачи данных на фронт. Страница индекса отображается и создается полностью с JS в javascript_pack_tag. Затем я вызываю свой собственный API для json данных, сохраненных в PG, а затем в сторонний API openweathermap. Все работало так, как я хотел, затем я попытался сохранить свой ключ API openweathermap с помощью gon gem. Я был в состоянии сделать это. Однако это сломало мое приложение. Затем я отменил все gon gem, и приложение все еще не работает.

Ошибка
терминал

#ubuntu terminal
ActionController::UnknownFormat (CitiesController#index is missing a template 
for this request format and variant.

request.formats: ["application/json"]
request.variant: []):   

консоль

#chrome console
class_mode.js:238 GET http://localhost:3000/cities.json 406 (Not Acceptable)
fetchCityData @ class_mode.js:238
(anonymous) @ class_mode.js:9
localhost/:1 Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0 
#class_mode.js 
line 238> return fetch(BASE_URL).then(res => res.json()).then(function (json) { 

Из этих ошибок я проследил это до действия моего контроллера, возвращающего HTML вместо JSON. В частности, <</strong> обозначает html, возвращающихся в контроллер.

Последняя попытка исправить в контроллере

 def index 
   @all = City.all_in_json  
   respond_to do |format|
      format.html { render :index }
      format.json { @all }
    end
   end   

Я также переместил json logi c в модель City как таковую

def  self.all_in_json 
         @cities = self.all
              @returnValue = @cities.map do |city|  
             if city[:name] === nil 
                city[:name] = city.to_name 
                city.save! 
                city
             else
                city
              end  
              end  
            @returnValue.to_json 

    end 

Опять же, это приложение работало отлично. Я потратил целый день на отладку и теперь обращаюсь к StackOverflow.
Я попытался создать отдельные маршруты для вызова моего запроса fetch () для получения всех записей таблицы City / пытался ответить_то.

1 Ответ

1 голос
/ 11 апреля 2020

Ваше действие контроллера не говорит, что нужно визуализировать, оно просто вызывает переменную @all. Предполагая, что вы правильно присваиваете @all строке json, попробуйте изменить метод контроллера следующим образом:

 def index 
   @all = City.all_in_json  
   respond_to do |format|
      format.html { render :index }
      format.json { render json: @all, status: 200, message: 'bla' }
   end
 end

Состояние и сообщение не являются обязательными

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...