Sinatra 触发另一个路由

2023-12-19 16:10 更新

有些时候,pass 并不是你想要的,你希望得到的是另一个路由的结果。简单的使用 call 可以做到这一点:

get '/foo' do
  status, headers, body = call env.merge("PATH_INFO" => '/bar')
  [status, headers, body.map(&:upcase)]
end

get '/bar' do
  "bar"
end

请注意在以上例子中,你可以更加简化测试并增加性能,只要简单将"bar"移动到 helper 中,然后就可被/foo 和 /bar 同时使用的 helper。

如果你希望请求被发送到同一个应用,而不是副本,使用 call! 而不是 call.

如果想更多了解 call,请察看 Rack specification 中关于 call 的介绍。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号