我有一個Rails 5 API,在/ client目錄下運行一個React前端。我試圖通過React前端實現資源的所有CRUD操作。 的陣營前端在端口3000上運行,和Rails API後端是我已經安裝/啓用on Rails的CORS端口3001上運行:React前端POST/PUTS到Rails 5 API後端
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins 'localhost:3001'
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
,並在做出反應的package.json我:
"proxy": "http://localhost:3000",
我的軌道路線是:
Prefix Verb URI Pattern Controller#Action
dogs GET /dogs(.:format) dogs#index
POST /dogs(.:format) dogs#create
dog GET /dogs/:id(.:format) dogs#show
PATCH /dogs/:id(.:format) dogs#update
PUT /dogs/:id(.:format) dogs#update
DELETE /dogs/:id(.:format) dogs#destroy
目前,我能成功獲得和使用做出反應顯示狗的列表:
window.fetch('dogs')
.then(response => response.json())
.then(json => this.setState({dogs: json}))
.catch(error => console.log(error))
}
但是,我希望能夠編輯每隻狗。所以我有一個「狗」下面的陣營組件來處理更新:
handleSubmit(event) {
event.preventDefault()
let url = `dogs/${this.state.id}`
let data = {
dog: {
id: this.state.id,
name: this.state.name,
age: this.state.age,
sex: this.state.sex,
description: this.state.description
}
}
let updateDog = {
method: 'PUT',
body: data
}
fetch(url, updateDog)
.then(json => console.log(json))
.catch(error => console.log(error))
}
(我將使用響應最終設置狀態,但是隻記錄了它) 在Chrome瀏覽器的控制檯,當我提交形式出現以下錯誤:
PUT http://localhost:3000/dogs/1 400 (Bad Request)
Dog.jsx:61 Response {type: "cors", url: "http://localhost:3000/dogs/1", redirected: false, status: 400, ok: false…}
但是當我使用郵差提交下列PUT到http://localhost:3000/dogs/1,它成功地更新狗!我究竟做錯了什麼?
{
"id": 1,
"name": "Lord Barkington",
"age": 7,
"sex": "M",
"description": "Pieces of Eight jolly boat mutiny me cable spike Sail ho ho draught reef sails grapple schooner topsail Yellow Jack.",
}
出於好奇,如果您在confit中間件設置中設置了「origin」*「',它會起作用嗎?或者可能添加「127.0.0.1:3000」。在您停止服務器以重新加載更改後,務必運行'spring stop'。 – treiff
不幸的是我仍然收到一個錯誤的請求。 – Hinchy