我在ReactJS中有一个注册表单,并希望以JSON格式将用户数据(名称,电子邮件,密码)发送到我的rails API . 然后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: 'controller@user.com', 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: "test@post.com",
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的参数包装 . 谢谢您的帮助!
2 回答
在这种情况下,JSON参数不具有符号键,而是字符串键 . 试试这个:
配置Rack :: Cors以接受OPTIONS就可以了,就像他的评论中的sideshowbarker explainend一样 .
application.rb中
在前端