2017-08-19 4 views
0

注:私はTornadoを初めて使用しています。Emornを使用して生成されたコンテンツでTornadoを使用してHTTPサーバーを実行すると、ページを更新できません。

私の問題を再作成するにはI次のPythonファイルを持っている:

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() 

私は、ちょうど他に遷移ごとにボタン一つで二つの経路(/ route1のおよび/ route2)がエンバープロジェクトを持っているがルート、およびbeforeModelのroute1に移行するアプリケーションルート。 Emberによって生成されたdistディレクトリを上記のPythonファイルを含むディレクトリにコピーします。 Pythonファイルを実行してlocalhost:34567に移動すると、これは自動的にlocalhost:34567/route1に移り、次にボタンを押してページ間を移動できます。ただし、ページを更新するか、アドレスバーにlocalhost:34567/route1と入力すると、「404:Not Found」ページが表示されます。私はトルネードのセットアップから何が欠けていますか?

おかげで(競合他社のほとんどのように)

答えて

1

エンバーはpushState(または/およびハッシュルート)を使用し、独自のクライアントベースルータを持っています。あなたがそうしない限り、Emberはバックエンドに対して何の要求もしません。

解決策は簡単です。トルネードでは、期待するすべてのパスにIndexHandlerを使用してください。一般的な方法は、すべてのパスを処理することですが、アセットです。例:

# 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

ご迷惑をおかけして申し訳ありません。 – KroneckerDeIta

関連する問題