0

我有一个场景,我正在通过 app.rb 中的 Typhoeus 在 Sinatra 中发帖。它看起来像这样:

post "/send-data" do
  ...
  request = Typhoeus::Request.new("http://localhost:4000/renders",
                              :method         => :post,
                              :headers        => { :Accept => "text/html" },
                              :followlocation => true,
                              :timeout        => 100, # milliseconds
                              :params         => params )

  # Run the request via Hydra.
  hydra = Typhoeus::Hydra.new
  hydra.queue(request)
  hydra.run
  ...
end

当我成功发布到“发送数据”Typhoeus 时,它会发布并将用户推送到创建记录的视图 (http://localhost:4000/renders/34634646464),这是一个 rails 应用程序。

问题是用户永远不会被重定向到 /send-data,因此如果您刷新页面,它会尝试再次发布。我想这是有道理的,但我真的需要将用户重定向到记录的最终(url)位置。换句话说,可以看到新记录,但这种重定向方法实际上并没有将用户移出 sinatra 应用程序。

处理这个问题的最佳方法是什么?我唯一能想到的就是不使用“followlocation”,而是让 /send-data 控制器操作在从 Typhoeus 获得响应位置后进行重定向。

4

1 回答 1

1

我尝试了我的建议,它有效……而且看起来还不错。

request = Typhoeus::Request.new("http://localhost:4000/renders.json",
                            :method         => :post,
                            :headers        => { :Accept => "json" },
                            :timeout        => 100, # milliseconds
                            :params         => params )

hydra = Typhoeus::Hydra.new
hydra.queue(request)
hydra.run

response = request.response
redirect response.headers_hash['Location']

我确实必须对我的 Rails 服务器进行更改。rails create 操作以 json 响应,'Location' 是它的返回值。“位置”是新创建的记录所在的位置。然后我只做一个 Sinatra 重定向,它将重定向到 rails 应用程序上的新记录。

于 2012-12-29T05:13:52.563 回答