gpt4 book ai didi

ruby - Sinatra:过滤器排序之前

转载 作者:数据小太阳 更新时间:2023-10-29 08:05:30 25 4
gpt4 key购买 nike

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

我已经设置了过滤器,还在过滤器之前设置了一些特定的路由。似乎我的路由特定过滤器在我的全局过滤器之前执行,因此崩溃,因为尚未设置预期的实例变量。

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

最佳答案

这对我有用,适用于 Sinatra 1.3.2。

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

这给了我 ["everything", "specific"] 这正是我所期望的。有没有可能你没有先于所有其他过滤器的 catch-all 过滤器?

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

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

关于ruby - Sinatra:过滤器排序之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9459397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com