2016-07-10 10 views
0

Ich bin auf Sinatra und ich verstehe nicht, wie bei meinem Problem umgehen:Sinatra vor Filter

Ich möchte „Senden“ eine benutzerdefinierte Nachricht kräuseln, wenn er auf einem falschen Weg zu gehen versuchen.

curl http://localhost:port/blabla Es ist ein Fehler 404, aber ich will, dass ihm etwas wie senden ‚Fehler versuchen, anderen Pfad‘

ich mit dieser versucht:

before'/*' do 
    if (params[:splat].to_s =~ /path_i_want/) != 2 
    'wrong path' 
    end 
end 

oder mit raise 404 aber es funktioniert nicht .

Könnten Sie mir bitte helfen?

Grüße.

+0

Warum die ' ! = 2'? Welcher Char erwartet Sie bei Index '1' und' 0'? Soll der Regexp mit der gesamten Zeichenfolge oder nur einer Teilzeichenfolge übereinstimmen? Ich frage, weil es schneller ist, Zeichenfolgen zu vergleichen, die eine Regexp verwenden. – spickermann

+0

Ja, ich sollte Vergleich statt Regexp verwenden. aber ich löse mein Problem nicht. Ich weiß nicht, wie es geht. – echo55

+0

Haben Sie darüber nachgedacht, 'puts params.inspect' hinzuzufügen, um zu untersuchen, ob der Splat tatsächlich gefangen wird? – spickermann

Antwort

0

Sinatra hat eine integrierte Handler für 404, siehe Error Handling Seite. Du könntest deine ganze Logik dort hinein tun.

Nicht gefunden

Wenn ein Sinatra :: NotFound Ausnahme ausgelöst wird, oder der Statuscode der Antwort ist 404, wird der not_found Handler aufgerufen:

not_found do 
    'This is nowhere to be found.' 
end 
+0

Danke es war das. – echo55

+0

@ echo55 Wenn diese Antwort Ihr Problem gelöst hat, sollten Sie es akzeptieren, indem Sie auf das Häkchen auf der linken Seite klicken. Die Annahme einer Antwort hilft künftigen Lesern, die ähnliche Probleme zu lösen versuchen. – MarsAtomic