1

Angular 2 と Go を使用してシングル ページ アプリケーションを構築しています。Angular ではルーティングを使用しています。たとえば のサイトを開くとhttp://example.com/、Go が私のindex.htmlファイルを提供してくれます。

mux.Handle("/", http.FileServer(http.Dir(mysiteRoot)))

これで、Angular にルートができました。たとえば、/postsです。それがデフォルト ルートの場合 (つまり、 が の場合useAsDefault) true、または手動で に移動した場合http://example.com/posts、Go から 404 エラーが発生します。これは、ハンドラーが指定されていないことを意味します。このパスのために。

多くのルートが存在する可能性があるため、単一の Angular ルートごとに Go でハンドラーを作成することは良い考えではないと思います。私の質問は、index.htmlリクエスト URL が自分で設定した他のパターンと一致しない場合、Goでどのようにサービスを提供できますServeMuxか?

4

2 に答える 2

1

まあ、それは実際にはかなり簡単でした。net/httpドキュメントには次のように書かれています。

スラッシュで終わるパターンはルート化されたサブツリーの名前であるため、パターン "/" は、Path == "/" を持つ URL だけでなく、他の登録済みパターンと一致しないすべてのパスに一致することに注意してください。

"/"そのため、ハンドラーで何かをする必要がありました。http.FileServerパターン文字列で指定されたディレクトリ内のファイルを検索するため、これを次のように置き換えました。

mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    http.ServeFile(w, r, mysiteRoot + "index.html")
})

そして、それはうまく機能します。

于 2016-04-09T20:24:27.803 に答える