58

私は2つのアプリを持っています。1つは反応フロントエンドで、2つ目はrails-apiアプリです。

PATCH メソッドをサーバーに送信する必要が生じるまで、私はisomorphic-fetchを喜んで使用してきました。

私は得ています:

Fetch API cannot load http://localhost:3000/api/v1/tasks. Method patch is not allowed by Access-Control-Allow-Methods in preflight response.

ただし、サーバーからの OPTIONS 応答には、Access-Control-Allow-Methods のリストに PATCH メソッドが含まれています。

ここに画像の説明を入力

フェッチの実装方法は次のとおりです。

const API_URL = 'http://localhost:3000/'                                            
const API_PATH = 'api/v1/'

fetch(API_URL + API_PATH + 'tasks', {
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  method: 'patch',                                                              
  body: JSON.stringify( { task: task } )                                        
})

POST、GET、DELETE はほぼ同じように設定されており、正常に動作しています。

ここで何が起こっているのか分かりますか?

アップデート:

メソッド パッチは大文字と小文字を区別します。

https://github.com/github/fetch/blob/master/fetch.js#L200

これが意図されたものなのかバグなのかは不明です。

更新 2

これは意図的なものであり、メソッド タイプ PATCH では大文字と小文字を区別する必要があります。行を fetch メソッドから次のように更新します。

method: 'PATCH'

問題を修正します。

https://github.com/github/fetch/issues/254

4

3 に答える 3

6

Rack::Cors を使用して、reactJS フロント エンドと Rails API で非常によく似た問題が発生しpatch、許可されたメソッドのリストに追加することで問題が解決しました。

config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins '*'
    resource '*', headers: :any, methods: [:get, :post, :patch, :options]
  end
end
于 2016-10-25T20:20:16.843 に答える