简单的Roda应用,在单独的文件中具有路由

时间:2018-08-06 20:34:21

标签: ruby roda

我正在尝试学习Roda,在将路线分离到自己的文件中时遇到了一些麻烦。我从Roda README中运行了一个简单的应用程序,并以此为基础进行了开发。

我也在尝试使用multi_route插件。到目前为止,这是我的设置:

config.ru

require 'rack/unreloader'
Unreloader = Rack::Unreloader.new { Greeter }
require 'roda'
Unreloader.require './backend.rb'
run Unreloader

backend.rb

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 }

index.rb

Greeter.route '/' do |r|
  r.redirect 'hello'
end

hello.rb

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,但不确定。

1 个答案:

答案 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/hellolocalhost: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