ReactJSに登録フォームがあり、JSON形式のユーザーデータ(名前、電子メール、パスワード)を自分のrails APIに送信したいとします。 RailsはJSONデータをパラメータに解析しません。Rails JSONパラメータが解析されない
ルート
Rails.application.routes.draw do
get '/list_users' => 'users#index'
post '/register_user' => 'users#register'
end
ユーザーコントローラ
class UsersController < ApplicationController
def index
@users = User.all
render json: @users
end
def register
puts params.inspect
@user = User.new(name: 'TEST', :email => params[:email], :password => params[:password])
#@user = User.new(name: 'User', email: '[email protected]', password: 'password') (this works)
@user.save
end
end
はparams.inspect出力を置く:
<ActionController::Parameters {"controller"=>"users", "action"=>"register"} permitted: false>
登録フォーム
postData(){
var myHeaders = new Headers();
myHeaders.append('Accept', 'application/json')
myHeaders.append('Content-Type', 'application/json');
var data = JSON.stringify({
name: "Test",
email: "[email protected]",
password: "password"
})
fetch("http://127.0.0.1:3000/register_user",{
method: 'POST',
headers: myHeaders,
mode: 'no-cors',
body: data
})
.then(function(res){ return res.json(); })
.then(function(data){ alert(JSON.stringify(data)) })
.catch((ex) => {
console.log("Fetch failed" + ex);
});
}
JSONのパラメータラッピングがコンフィグレーションで有効になっています。 助けてくれてありがとう!
'myHeaders.append( 'Content-Typeの'、 'アプリケーション/ JSON');'あなたのフロントエンドコードトリガーの一部あなたのブラウザはCORSプリフライトOPTIONSリクエストを送信します。 'mode: 'no-cors''を設定しても、ブラウザはそれをやり遂げることができません。したがって、 'http://127.0.0.1:3000/register_user'サーバがOPTIONSリクエストを処理し、それに応じて正しいCORSヘッダを返すように設定されていない場合、そのプリフライトは失敗し、ブラウザはそこで停止し、あなたのコードからPOSTリクエストを送信しようとしても。 – sideshowbarker
ありがとう、私は私のラックを編集しました::レールを設定し、フロントエンドのモードにモードを変更しましたが、すべて正常に動作しません。 –