我需要使用Sinatra制作一些看起来像的方法:
的http //:本地主机:1234 /添加string_to_add
但是当我宣布这样的时候:
get "/add?:string_to_add" do
...
end
它没有看到string_to_add
参数。
我应该如何声明我的方法并使用此参数来使事情有效?
答案 0 :(得分:18)
在网址中,问号将path部分与query部分分开。查询部分通常由名称/值对组成,并且通常由Web浏览器构造,以匹配用户输入表单的数据。例如,网址可能如下所示:
http://example.com/submit?name=John&age=93
此处/submit
中的路径部分和查询部分为name=John&age=93
,其中name
键的值为“John”,{{1}为“93” }}
当您在Sinatra create a route时,您只需指定路径部分。然后,Sinatra解析查询,并使age
对象中的数据可用。在这个例子中,你可以这样做:
params
如果在定义Sinatra路由时使用get '/submit' do
name = params[:name]
age = params[:age]
# use name and age variables
...
end
字符,则会使url的一部分成为可选项。在您使用的示例(?
)中,它实际上会匹配以get "/add?:string_to_add"
开头的任何网址,然后可选地匹配另一个/ad
,然后其他任何内容都将放入d
params散列的键,查询部分将被单独解析。换句话说,问号使前面的:string_to_add
字符可选。
如果您想在Sinatra中获取查询字符串的“原始”文本,可以使用query_string
method of the request
object。在您的示例中看起来像这样:
d
请注意,该路线不包含get '/add' do
string_to_add = request.query_string
...
end
字符,只包含基座?
。
答案 1 :(得分:0)
您应该将其声明为:
get "/add?:string_to_add?" do
...
end