#ruby-on-rails #ruby #vue.js #cross-domain #axios
#ruby-on-rails #ruby #vue.js #междоменный #axios
Вопрос:
У меня есть rails API в Rails 5.2 и интерфейс в Vuejs, использующий Axios для запроса API. Когда я запрашиваю у postman на маршруте
[ПОЛУЧИТЬ]http://localhost:3000/foo
Я получаю ожидаемый ответ в формате JSON.
Но когда я запрашиваю с помощью Axios :
import axios from 'axios'
export default {
getAll () {
return axios.get('http://localhost:3000/foo', {
headers: { 'Content-Type': 'application/json' }
})
}
}
Я получил этот ответ от сервера :
В CleanwalksController#index отсутствует шаблон для этого формата и варианта запроса. запрос.форматы: [«текст / html»] запрос.вариант: []
У меня есть следующая конфигурация / cors.rb :
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins '*'
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
У меня возникла та же проблема, когда я пытаюсь получить доступ кhttp://localhost:3000/foo напрямую.
Вот мой контроллер :
class FooController < ApplicationController
def index
@foo = foo.all
end
end
Комментарии:
1. Вы пробовали вызывать localhost:3000/foo.json , чтобы заставить запрос использовать вариант JSON (вместо того, чтобы полагаться на заголовок)?
Ответ №1:
Я думаю, что ваша проблема связана с вашим представлением, есть ли у вас файл с именем index.html.erb. В противном случае вы можете определить формат множественного ответа следующим образом :
class FooController < ApplicationController
def index
@foo = foo.all
respond_to do |format|
format.html { render :index }
format.json { render json: @foo, status: 200 }
end
end
end
Ответ №2:
У меня была точно такая же проблема. В моих спецификациях и в postman все работало идеально, но по какой-то причине я получал 406 с vue / axios.
После долгих усилий я обнаружил опечатку в моем файле routes:
namespace :v1, default: { format: :json } do
Это должны были быть значения по умолчанию (множественное число)
namespace :v1, defaults: { format: :json } do