Есть ли способ создать фильтр "before" для захвата и предварительной обработки всех запросов POST в Sinatra?
Перед фильтром для всех запросов POST в Синатре?
Ответ 1
Один из способов сделать это - создать пользовательское условие для использования в фильтре:
set(:method) do |method|
method = method.to_s.upcase
condition { request.request_method == method }
end
before :method => :post do
puts "pre-process POST"
end
Ответ 2
Ваше решение полностью работоспособно.
Я бы сделал это так:
before do
next unless request.post?
puts "post it is!"
end
Или вы также можете использовать весь маршрут почты, который затем передает запрос (должен быть первым почтовым маршрутом):
post '*' do
puts "post it is!"
pass
end
Ответ 3
+1 на матовый ответ выше... Я в конечном итоге расширил его, включив поддержку одного или нескольких методов:
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
Ответ 4
Я придумал это:
before do
if request.request_method == "POST"
puts "pre-process POST"
end
end
... но если кто-то знает лучший способ, пожалуйста, поделитесь.