Sinatra 過濾器

2023-12-19 16:16 更新

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

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

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

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

after do
  puts response.status
end

請(qǐng)注意:除非你顯式使用 body 方法,而不是在路由中直接返回字符串,消息體在后置過濾器是不可用的,因?yàn)樗谥蟛艜?huì)生成。

過濾器可以可選地帶有范式 (pattern),只有請(qǐng)求路徑滿足該范式 (pattern) 時(shí)才會(huì)執(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)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)