我需要用 Sinatra 做一些方法,看起来像:
http//:localhost:1234/add?string_to_add
但是当我这样声明时:
get "/add?:string_to_add" do
...
end
它没有看到string_to_add
参数。
我应该如何声明我的方法并使用这个参数来使事情起作用?
在 URL 中,问号将路径部分与查询部分分开。查询部分通常由名称/值对组成,通常由 Web 浏览器构建以匹配用户输入表单的数据。例如,一个 url 可能看起来像:
http://example.com/submit?name=John&age=93
这里的路径部分/submit
和查询部分是name=John&age=93
指键的值“John” name
,而age
.
在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"
) 的示例中,它实际上将匹配任何以 开头的 url /ad
,然后是可选的另一个d
,然后将其他任何内容放入:string_to_add
params 哈希的键中,并且将单独解析查询部分。换句话说,问号使前面的d
字符可选。
如果要在 Sinatra 中获取查询字符串的“原始”文本,可以使用object的query_string
方法request
。在您的示例中,它看起来像这样:
get '/add' do
string_to_add = request.query_string
...
end
请注意,路线不包括?
角色,只包括 base /add
。
您应该将其声明为:
get "/add?:string_to_add?" do
...
end