我需要使用 Sinatra 制作一些方法,应该如下所示:
http//:localhost:1234/add?string_to_add
但是当我这样声明时:
get "/add?:string_to_add" do
...
end
它没有看到 string_to_add
参数。
我应该如何声明我的方法并使用此参数使事情正常进行?
最佳答案
在 URL 中,用问号分隔 path部分来自 query部分。查询部分通常由名称/值对组成,通常由 Web 浏览器构造以匹配用户在表单中输入的数据。例如,一个 url 可能如下所示:
http://example.com/submit?name=John&age=93
这里是/submit
中的路径部分, 查询部分是 name=John&age=93
它指的是 name
的值“John”键,“93”代表 age
.
当你create a route在 Sinatra 中,您只需指定路径部分。然后 Sinatra 解析查询,并使其中的数据在 params
中可用。目的。在此示例中,您可以执行以下操作:
get '/submit' do
name = params[:name]
age = params[:age]
# use name and age variables
...
end
如果您使用 ?
定义 Sinatra 路由时的字符,它使部分 url 可选。在您使用的示例 ( get "/add?:string_to_add"
) 中,它实际上会匹配以 /ad
开头的任何 url。 ,然后可选地另一个 d
,然后其他任何内容都将放入 :string_to_add
中params hash 的 key,query 部分将被单独解析。换句话说,问号使前面的 d
字符可选。
如果您想在 Sinatra 中获取查询字符串的“原始”文本,您可以使用 query_string
method of the request
object .在您的示例中,它看起来像这样:
get '/add' do
string_to_add = request.query_string
...
end
请注意,该路线不包括 ?
字符,只是基础 /add
.
关于ruby - Sinatra 和问号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15774187/