在过滤Sinatra中的所有POST请求之前?

时间:2013-03-27 22:46:58

标签: ruby filter sinatra

有没有办法创建一个“之前”过滤器来捕获和预处理Sinatra中的所有POST请求?

4 个答案:

答案 0 :(得分:21)

执行此操作的一种方法是创建要在过滤器中使用的自定义condition

set(:method) do |method|
  method = method.to_s.upcase
  condition { request.request_method == method }
end

before :method => :post do
  puts "pre-process POST"
end 

答案 1 :(得分:12)

您的解决方案完全有效。

我会这样做:

before do
  next unless request.post?
  puts "post it is!"
end

或者,您也可以使用全部邮寄路线,然后提交请求(需要首先发布路线):

post '*' do
  puts "post it is!"
  pass
end

答案 2 :(得分:10)

+1 matt上面的答案......我最后扩展它以包含对一个或多个方法的支持:

set :method do |*methods|
    methods = methods.map { |m| m.to_s.upcase }
    condition { methods.include?(request.request_method) }
end

before method: [:post, :patch] do
    # something
end

答案 3 :(得分:3)

我想出了这个:

before do
    if request.request_method == "POST"
        puts "pre-process POST"
    end
end

...但如果有人知道更好的方法,请分享。