Sinatra 過濾器

2023-12-19 16:16 更新

前置過濾器 (before) 在每個請求前,在請求的上下文環(huán)境中被執(zhí)行,而且可以修改請求和響應(yīng)。在過濾器中設(shè)定的實例變量可以被路由和模板訪問:

before do
  @note = 'Hi!'
  request.path_info = '/foo/bar/baz'
end

get '/foo/*' do
  @note #=> 'Hi!'
  params[:splat] #=> 'bar/baz'
end

后置過濾器 (after) 在每個請求之后,在請求的上下文環(huán)境中執(zhí)行,而且可以修改請求和響應(yīng)。在前置過濾器和路由中設(shè)定的實例變量可以被后置過濾器訪問:

after do
  puts response.status
end

請注意:除非你顯式使用 body 方法,而不是在路由中直接返回字符串,消息體在后置過濾器是不可用的,因為它在之后才會生成。

過濾器可以可選地帶有范式 (pattern),只有請求路徑滿足該范式 (pattern) 時才會執(zhí)行:

before '/protected/*' do
  authenticate!
end

after '/create/:slug' do |slug|
  session[:last_slug] = slug
end

和路由一樣,過濾器也可以帶有條件:

before :agent => /Songbird/ do
  # ...
end

after '/blog/*', :host_name => 'example.com' do
  # ...
end


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號