codecamp

Sinatra 过滤器

前置过滤器 (before) 在每个请求前,在请求的上下文环境中被执行,而且可以修改请求和响应。在过滤器中设定的实例变量可以被路由和模板访问:

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

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

后置过滤器 (after) 在每个请求之后,在请求的上下文环境中执行,而且可以修改请求和响应。在前置过滤器和路由中设定的实例变量可以被后置过滤器访问:

after do
  puts response.status
end

请注意:除非你显式使用 body 方法,而不是在路由中直接返回字符串,消息体在后置过滤器是不可用的,因为它在之后才会生成。

过滤器可以可选地带有范式 (pattern),只有请求路径满足该范式 (pattern) 时才会执行:

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


Sinatra 添加你自己的模版引擎
Sinatra 使用 Sessions
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Sinatra 配置

Sinatra 错误处理

Sinatra Sinatra::Base - 中间件,程序库和模块化应用

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }