Передающие данные между блоками с помощью sinatra

Я пытаюсь передать данные между блоками с помощью 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, ноль и бросает ошибку. Почему это?

10
задан Dan Galipo 24 April 2010 в 14:22
поделиться

1 ответ

Причина в том, что браузер фактически выполняет два отдельных HTTP-запроса.

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

Два запроса означают два отдельных процесса, поэтому переменная экземпляра @data очищается после отправки первого ответа. Если вы хотите сохранить информацию, вам нужно использовать файлы cookie или сеансы, в противном случае передать данные в querystring

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

get "/tmp" do
   puts params[:test]
end
16
ответ дан 3 December 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: