我正在尝试学习Roda,在将路线分离到自己的文件中时遇到了一些麻烦。我从Roda README中运行了一个简单的应用程序,并以此为基础进行了开发。
我也在尝试使用multi_route插件。到目前为止,这是我的设置:
require 'rack/unreloader'
Unreloader = Rack::Unreloader.new { Greeter }
require 'roda'
Unreloader.require './backend.rb'
run Unreloader
require 'roda'
# Class Roda app
class Greeter < Roda
puts 'hey'
plugin :multi_route
puts 'hey hey hey'
route(&:multi_route)
end
Dir['./routes/*.rb'].each { |f| require f }
Greeter.route '/' do |r|
r.redirect 'hello'
end
Greeter.route '/hello' do |r|
r.on 'hello' do
puts 'hello'
@greeting = 'helloooooooo'
r.get 'world' do
@greeting = 'hola'
"#{@greeting} world!"
end
r.is do
r.get do
"#{@greeting}!"
end
r.post do
puts "Someone said #{@greeting}!"
r.redirect
end
end
end
end
所以,现在,当我执行我的rackup config.ru并在浏览器中转到localhost:9292时,控制台中将显示一个空白页和404。什么地方不合适?我怀疑我没有正确使用multi_route,但不确定。
答案 0 :(得分:0)
它有些旧,但也许对以后的某个人有用。
对于Roda,正斜杠非常重要。在您的示例中,Greeter.route '/hello' do |r|
匹配localhost:9292//hello
,而不匹配localhost:9292/hello
。
您可能想要以下内容:
Greeter.route do |r|
r.redirect 'hello'
end
还有这个。嵌套的r.on 'hello' do
意味着树的该分支仅与localhost:9292/hello/hello
和localhost:9292/hello/hello/world
相匹配,这可能不是您想要的。
Greeter.route 'hello' do |r|
puts 'hello'
@greeting = 'helloooooooo'
r.get 'world' do
@greeting = 'hola'
"#{@greeting} world!"
end
r.is do
r.get do
"#{@greeting}!"
end
r.post do
puts "Someone said #{@greeting}!"
r.redirect
end
end
end