2 votes

Sinatra : Spécifier l'ordre dans lequel les routes sont recherchées lors de l'utilisation de plusieurs applications ?

J'ai une application Sinatra de style classique, et j'y ajoute une application modulaire avec use MyModularApp .

Cela fonctionne bien, et les itinéraires des applications classique et modulaire sont disponibles lorsque je lance l'application classique. Le problème est qu'il semble que les itinéraires des applications modulaires soient recherchés en premier et que les applications de l'application classique ne soient recherchées qu'ensuite. Je voudrais le comportement inverse. Comment puis-je l'obtenir ?

4voto

matt Points 33799

Les applications Sinatra peuvent être utilisé comme intergiciel Rack ainsi qu'une application à part entière. Avec use MyModularApp vous êtes ajouter le module dans la pile middleware afin qu'il voie la demande avant l'application principale ; cela se produira partout où vous avez l'option use dans votre fichier source.

Lorsqu'elles agissent en tant qu'intergiciel, les applications Sinatra transmettent la demande en aval de la pile si aucune route ne correspond dans l'application actuelle, ce qui explique le comportement actuel.

Une façon de le faire fonctionner comme vous le souhaitez serait de créer un compte client. not_found qui appelle votre application modulaire :

not_found do
  MyModularApp.call(env)
end

Maintenant, si votre application principale n'a pas de route qui correspond à la demande, l'application modulaire sera appelée.

0voto

BlackHatSamurai Points 6211

Según la documentation de Sinatra :

Les routes sont appariées dans l'ordre où elles sont définies. La première route qui correspond à la demande est invoquée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X