2017-08-19 2 views
0

Remarque: Je suis nouveau à Tornado.Lors de l'exécution d'un serveur HTTP en utilisant Tornado avec du contenu généré à l'aide de Ember ne peut pas actualiser la page

Pour recréer mon problème je le fichier Python suivant:

import tornado.httpserver 
import tornado.ioloop 
import tornado.web 

class IndexHandler(tornado.web.RequestHandler): 
    @tornado.web.asynchronous 
    def get(self): 
     self.render("dist/index.html") 

def start_server(): 
    app = tornado.web.Application([ 
     (r'/', IndexHandler), 
     (r'/assets/(.*)', tornado.web.StaticFileHandler, {"path": "dist/assets"}), 
    ]) 

    ioLoopInstance = tornado.ioloop.IOLoop.instance() 

    http_server = tornado.httpserver.HTTPServer(app, io_loop=ioLoopInstance) 
    http_server.listen(34567) 
    ioLoopInstance.start() 

if __name__ == '__main__': 
    start_server() 

J'ai alors un projet Ember qui a deux voies (/ route1 et/Route2) avec un bouton sur chaque qui transitions juste à l'autre route et une route d'application qui transite en route1 dans beforeModel. Je copie le répertoire dist généré par Ember dans le répertoire qui contient le fichier Python ci-dessus. Lorsque je lance le fichier Python et navigue vers localhost: 34567 cela passe automatiquement à localhost: 34567/route1, je peux alors appuyer sur les boutons pour naviguer entre les pages. Cependant, lorsque j'actualise la page ou que j'entre localhost: 34567/route1 dans la barre d'adresse, j'obtiens une page "404: Not Found". Que manque-t-il à mon installation Tornado?

Merci

Répondre

1

Ember (comme la plupart de ses concurrents) a son propre routeur basé sur le client , qui utilise pushState (et/ou des itinéraires de hachage). Ember, à moins que vous ne le fassiez, ne fait aucune demande au backend.

La solution est simple, dans Tornado utiliser le IndexHandler pour tous les chemins que vous attendez. Le moyen commun est de gérer tous les chemins, mais les actifs. Exemple:

# note 1: '.*' match all 
# note 2: Tornado router matches paths in the order, 
#   so match all should be the last 
app = tornado.web.Application([ 
    (r'/assets/(.*)', tornado.web.StaticFileHandler, {"path": "dist/assets"}), 
    (r'/.*', IndexHandler), 
]) 
+0

Merci beaucoup, et merci pour les détails. – KroneckerDeIta