Не может получить доступ к response.body внутри после блока фильтра в Sinatra 1.0 - PullRequest
5 голосов
/ 20 марта 2010

Я борюсь со странной проблемой.Согласно http://github.com/sinatra/sinatra (второстепенные фильтры) объект ответа доступен в блоках после фильтра в Sinatra 1.0.Однако response.status правильно доступен, я не вижу непустого response.body из моих маршрутов внутри после фильтра.

У меня есть этот файл для хранения:

config.ru

require 'app'
run TestApp

Затем установили гем Sinatra 1.0.b, используя:

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 , поскольку ответ должен быть пустым.

В консоли я вижу, что в фильтре после фильтра ответ на /favicon.ico - это нечтовроде «Не найдено», и ответ на / test действительно пуст, даже если по маршруту возвращается ответ.

Что мне не хватает?

1 Ответ

6 голосов
/ 26 марта 2010

response.body установлен Sinatra :: Base # invoke, который оборачивается вокруг Sinatra :: Base # dispatch !, который в свою очередь вызывает фильтры. Однако #invoke устанавливает тело ответа после отправки! сделано, поэтому тело еще не установлено. То, что вы хотите сделать, вероятно, лучше решить с помощью промежуточного программного обеспечения для стойки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...