按照https://github.com/soveran/cuba#usage上的示例更改一下:
Cuba.define do
on get do
on 'home' do
res.write "Aloha!"
end
end
on 'api' do
on get do
on "home", params("a"), param("b") do |a,b|
res.write "Hello World!"
end
end
end
end
测试
scope do
test "Homepage" do
get "/api/home?a=00&b=11"
assert_equal "Hello World!", last_response.body
end
end
但是我的断言失败了:
AppTest.rb:15:in `block (2 levels) in <main>': "Hello world!" != "" (Cutest::AssertionFailed)
就像我在测试中使用的网址不对。我该怎么改变它?
更新
我注意到如果我更改了定义,那么它可以正常工作:
Cuba.define do
on 'api' do
on get do
on "home", params("a"), param("b") do |a,b|
res.write "Hello World!"
end
end
end
on get do
on 'home' do
res.write "Aloha!"
end
end
end
答案 0 :(得分:2)
我建议你以不同的方式构建你的路线,以保持干净和可维护。
例如,你可以这样做:
class API < Cuba
on get, root do
res.write("foo")
end
end
class Web < Cuba
on get, "home" do
res.write("bar")
end
end
Cuba.define do
on "api" do
run API
end
on default do
run Web
end
end
另外,请记住,当您使用param
匹配器时,您要说该参数必须在那里才能匹配。有时这就是你想要的。但是,如果查询参数是可选的,您可以通过req
:
on get, "home" do
foo = req.GET["foo"]
res.write(foo)
end