Sinatra和问号
我需要用Sinatra制作一些看起来像的方法:
访问http //:本地主机:1234 /添加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
,它指的是name
键的值“John”,而age
“93”。
在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
,然后将其他任何内容放入params散列的:string_to_add
键中,并且查询部分将单独解析。 换句话说,问号使前面的d
字符可选。
如果要在Sinatra中获取查询字符串的“原始”文本,可以使用request
对象的query_string
方法 。 在您的示例中,看起来像这样:
get '/add' do string_to_add = request.query_string ... end
注意路线不包括?
字符,只是基数/add
。
你应该声明为:
get "/add?:string_to_add?" do ... end