【问题标题】:Sinatra: before filter orderingSinatra:过滤器排序之前
【发布时间】:2012-02-27 02:39:17
【问题描述】:

我想定义一个全局前置过滤器,它将在每个请求之前运行,它会为所有方法设置一些实例变量。

我已经设置了过滤器,并且还在过滤器之前设置了一些特定的路线。看来我的路由特定过滤器在我的全局过滤器之前执行,因此由于尚未设置预期的实例变量而崩溃。

有没有办法指定前置过滤器的处理顺序?

【问题讨论】:

  • 你能贴一些代码吗?你拥有它们的顺序是什么?

标签: ruby sinatra


【解决方案1】:

这对我有用,在 Sinatra 1.3.2 上。

before do
  @filter = [] << 'everything'
end
before '/filter' do
  @filter << 'specific'
end
get '/filter' do
  @filter.inspect
end

这给了我["everything", "specific"],这是我所期望的。是否有可能您在其他所有过滤器之前没有包罗万象的过滤器?

在 Sinatra 中,路由是按从上到下的顺序进行评估的,而不是根据它们的匹配程度。因此,如果您在 catch-all 过滤器之前有特定过滤器,它将首先评估这些过滤器,如下所示:

before '/filter' do
  @filter = [] << 'specific'
end
before do
  @filter << 'everything'
end
get '/filter' do
  @filter.inspect
end    # => ["specific", "everything"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2018-02-19
    • 2020-07-10
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    相关资源
    最近更新 更多