Cra*_*ntz 12 ruby rack sinatra
Sinatra自述文件说:
request["SOME_HEADER"] # value of SOME_HEADER header
Run Code Online (Sandbox Code Playgroud)
鉴于此应用程序:
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
Run Code Online (Sandbox Code Playgroud)
第一个规范通过; 接下来的两个失败:
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
Run Code Online (Sandbox Code Playgroud)
看看来源,Sinatra实际上并没有做任何事情[]; 它在Rack中实现为GET和的结合POST.然后POST 只返回表单哈希.因为GET它是查询哈希.在所有三条路线中,request.params都是空的.
我的问题:这是一个doc bug,还是我误解了如何使用request[]?目前,我的应用程序正在使用该env[]方法.但我想"做对".
Cas*_*per 11
似乎是文档中的错误.request[]实际上检索请求的参数,而不是标题:
https://github.com/rack/rack/blob/master/lib/rack/request.rb#L262
def [](key)
params[key.to_s]
end
Run Code Online (Sandbox Code Playgroud)
我也通过测试仔细检查了它.看起来有点傻,但看起来你真的不能以任何方式直接访问标题,除了通过env.至少我无法想出任何其他方式.
我意识到如果标题中的参数是'SOME_HEADER'
我可以访问它
env['HTTP_SOME_HEADER']
Run Code Online (Sandbox Code Playgroud)
所以Sinatra(也许Rack)似乎添加了HTTP_前缀(和大写)...奇怪.
| 归档时间: |
|
| 查看次数: |
5349 次 |
| 最近记录: |