Sinatra内容类型包括json和表单
我一直在寻找如何正确地检查和响应application/json类型以及提交的表单。我终于用下面的代码让它自己工作了。有人能解释一下为什么它有效吗?还是提供更好的解决方案来实现同样的目标Sinatra内容类型包括json和表单,json,sinatra,Json,Sinatra,我一直在寻找如何正确地检查和响应application/json类型以及提交的表单。我终于用下面的代码让它自己工作了。有人能解释一下为什么它有效吗?还是提供更好的解决方案来实现同样的目标 post '/login', provides: :json do p = params if request.content_type == 'application/json' params = JSON.parse(request.body.read, :symbolize_names => t
post '/login', provides: :json do
p = params
if request.content_type == 'application/json'
params = JSON.parse(request.body.read, :symbolize_names => true)
else
params = p
end
requires(params, :email, :password)
if @user = User.find_by_email(params[:email])
if @user.authenticate(params[:password])
log_user_in(@user)
rabl :login, object: @user
else
error 404, {error: "incorrect credentials"}.to_json
end
else
error 404, {error: "user not found"}.to_json
end
endJSON请求在html请求的主体中提交,因此这是可行的,但如果使用RESTful路由,则不建议重写params散列
嘿,柯蒂斯。只需使用
::Rack::JSONBodyParser
来自:
机架中间件,使JSON编码的请求体在
request.params散列。默认情况下,它解析POST、PATCH和PUT
媒体类型为application/json的请求。你可以
通过:谓词将其配置为匹配任何谓词或媒体类型
和:媒体选项
示例:
- 仅解析POST和GET请求
使用Rack::JSONBodyParser,动词:['POST','GET']
- 解析内容类型与“json”匹配的POST | PATCH | PUT请求
使用Rack::JSONBodyParser,媒体:/json/
- 解析内容类型为“application/json”或“application/vnd+json”的POST请求
使用Rack::JSONBodyParser,动词:['POST'],媒体:['application/json','application/vnd.api+json']