【问题标题】:Passing data between blocks using sinatra使用 sinatra 在块之间传递数据
【发布时间】:2010-04-24 22:55:51
【问题描述】:

我正在尝试使用 sinatra 在块之间传递数据。例如:

@data = Hash.new
post "/" do
   @data[:test] = params.fetch("test").to_s
   redirect "/tmp"
end

get "/tmp" do
   puts @data[:test]
end

但是,每当我到达 tmp 块时,@data 为 nil 并引发错误。这是为什么?

【问题讨论】:

    标签: ruby sinatra


    【解决方案1】:

    原因是因为浏览器实际上执行了两个独立的 HTTP 请求。

    Request: POST /
    Response: 301 -> Location: /tmp
    Request: GET /tmp
    Response: ...
    

    两个请求意味着两个独立的进程,因此一旦发送第一个响应,@data 实例变量就会被清除。 如果要保留信息,则需要使用cookies或sessions,否则在querystring中传递数据

    post "/" do
       test = params[:test]
       redirect "/tmp?test=#{test}"
    end
    
    get "/tmp" do
       puts params[:test]
    end
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 2020-03-18
    • 2012-01-04
    相关资源
    最近更新 更多