Sinatra README说:
request["SOME_HEADER"] # value of SOME_HEADER header
鉴于此应用程序:
require 'sinatra'
post '/env' do
env['HTTP_X_FOO']
end
post '/request' do
request['X-Foo']
end
post '/request_rack_http_format' do
request['HTTP_X_FOO']
end
第一个规范通过;接下来的两个失败:
describe "Sinatra should place the header in" do
before(:all) do
header 'X-Foo', 'Bar'
end
example "env" do
post '/env'
last_response.body.should == 'Bar' #pass
end
example "request[]" do
post '/request'
last_response.body.should == 'Bar' #fail; got ""
end
example "request[] (rack format)" do
post '/request_rack_http_format'
last_response.body.should == 'Bar' #fail; got ""
end
end
查看源代码,Sinatra 实际上并没有对[]
;做任何事情。它在 Rack 中作为 和 的GET
并集实现POST
。并且POST
只返回表单 hash。因为GET
它是查询哈希。在所有三个路线中,request.params
都是空的。
我的问题:这是一个文档错误,还是我误解了如何使用request[]
?目前,我的应用程序使用该env[]
方法运行良好。但我想做到“正确”。