Rails 5.2 axios请求返回406

Rails 5.2 returning 406 with Axios Request

我有一个 rails API Rails 5.2 和一个 Vuejs 前端,使用 Axios 请求 API。 当我在路线

上向邮递员提出请求时

[GET] 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 is missing a template for this request format and variant. request.formats: ["text/html"] request.variant: []

我有以下 config/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

我认为你的问题来自于你的看法,你有一个名为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

我遇到了完全相同的问题。在我的规格和邮递员中,一切都完美无缺,但由于某种原因,我得到了 vue/axios.

的 406

经过多次纠结后,我发现我的路线文件中有一个拼写错误:

namespace :v1, default: { format: :json } do

应该是默认值(复数)

namespace :v1, defaults: { format: :json } do