10

我需要用 Sinatra 做一些方法,看起来像:

http//:localhost:1234/add?string_to_add

但是当我这样声明时:

get "/add?:string_to_add" do
...
end

它没有看到string_to_add参数。

我应该如何声明我的方法并使用这个参数来使事情起作用?

4

2 回答 2

18

在 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_addparams 哈希的键中,并且将单独解析查询部分。换句话说,问号使前面的d字符可选。

如果要在 Sinatra 中获取查询字符串的“原始”文本,可以使用object的query_string方法request。在您的示例中,它看起来像这样:

get '/add' do
  string_to_add = request.query_string
  ...
end

请注意,路线不包括?角色,只包括 base /add

于 2013-04-03T14:53:50.127 回答
0

您应该将其声明为:

get "/add?:string_to_add?" do
...
end
于 2013-04-03T05:58:26.193 回答