2012-05-29 6 views
10

Für eine kleine Entwicklerdokumentations-App möchte ich eine Sinatra-App einrichten, die nur HAML-Dateien bereitstellt. Nach Routen für CSS-Dateien und Bilder möchte ich eine Route, die versucht, eine HAML-Datei für jeden gewünschten Pfad zu laden.Wie kann ich Sinatra eine Catchall, Standardroute geben?

Zum Beispiel:

  • /index Lasten views/index.haml, wenn es
  • /this/page/might/exist Lasten views/this/page/might/exist.haml vorhanden ist, wenn es

existiert Wie würde ich diesen Weg geben?

Antwort

17

Sieht aus wie diese wird es tun:

get '/*' do 
    viewname = params[:splat].first # eg "some/path/here" 

    if File.exist?("views/#{viewname}.haml") 
    haml :"#{viewname}" 

    else 
    "Nopers, I can't find it." 
    end 
end 
+1

Ich hatte dies zu setzen ‚nach‘ alle meine anderen Routen, sie, um sicherzustellen, verarbeitet zu bekommen, da sonst die catchall Route '/ *' alle anderen blockieren würde Routen – Rots

+0

Was passiert, wenn Sie in diesem Block einen Fehler von 500 bekommen? – nroose

+0

@rorose - ein Fehler von 500 ist etwas, das ein Webserver zurückgeben würde; Es kann nicht in Ruby passieren. Wenn zB der 'haml'-Aufruf einen Fehler auslöst, hast du recht, dass ich ihn nicht retten würde und meine Site würde 500 zurückgeben. Außerdem, um korrekter zu sein, sollte ich einen 404-Statuscode in der Kopfzeile senden, wenn Senden Sie den Körper "Ich kann es nicht finden". Aber das ist nur ein einfaches Beispiel. –

Verwandte Themen