【发布时间】:2010-03-20 19:59:45
【问题描述】:
我正在努力解决一个奇怪的问题。根据http://github.com/sinatra/sinatra(部分过滤器),响应对象在 Sinatra 1.0 的过滤器块后可用。但是 response.status 可以正确访问,我在过滤后的路由中看不到非空 response.body。
我有这个机架文件:
config.ru
require 'app'
run TestApp
然后使用以下命令安装 Sinatra 1.0.b gem:
gem install --pre sinatra
这是我的小应用程序,只有一条路线:
app.rb
require 'rubygems'
require 'sinatra/base'
class TestApp < Sinatra::Base
set :root, File.dirname(__FILE__)
get '/test' do
'Some response'
end
after do
halt 500 if response.empty? # used 500 just for illustation
end
end
现在,我想访问 after 过滤器中的响应。当我运行这个应用程序并访问 /test URL 时,我得到了一个 500 响应,好像响应是空的,但响应显然是“一些响应”。
随着我对 /test 的请求,浏览器向 /favicon.ico 发出单独的请求,并且返回 404,因为没有路由也没有静态文件。但我希望返回 500 状态,因为响应应该为空。
在控制台中,我可以看到在 after 过滤器中,对 /favicon.ico 的响应类似于“未找到”,而对 /test 的响应确实是空的,即使路由返回了响应。
我错过了什么?
【问题讨论】: