2017-04-26 11 views
-1

は、私は次のコードを持っている:サービングサブディレクトリ[GoLang]

r := mux.NewRouter() 
r.Handle("/", http.FileServer(http.Dir("./frontend/build/"))) 
r.Handle("/static", http.FileServer(http.Dir("./frontend/build/static/"))) 
r.PathPrefix("/api").Handler(auth) 

/apiをセキュリティで保護することになっています。ユーザーが/にヒットした場合は、PROJECTDIR/frontendディレクトリのindex.htmlを表示します。

フロントエンドのディレクトリが/staticからindex.htmlをロード

frontend 
    /build 
     index.html 
     /static 
      /js 
      /css 
      /media 

などのすべての内容を検索します。どのように設定しても、 localhost:3000にアクセスすると index.htmlが得られますが、 /staticのものはすべて404です。

この設定を間違って設定するにはどうすればよいですか?

+0

参照[この同様のQA] (https://stackoverflow.com/questions/43601359/how-do-i-serve-css-and-js-in-go-lang) – putu

答えて

2

あなたは、静的な、あなたは、次の構文が動作するはずBSD/Linuxマシンを実行しているエンドポイント/の「静的」ディレクトリの全コンテンツを提供したいと仮定すると:

http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("./static")))) 
+0

私はMacOSを使っています(ビルド時にHerokuを実行しています)。あなたは静的に完全なパスを意味すると仮定しますか?これは機能しません。 \t r.Handle( "/"、http.FileServer(http.Dir( "frontend/build /"))) \t http.Handle( "/ static /"、http.StripPrefix( "/ static /"、http (フロントエンド/ビルド/静的/ ")))) \tハンドラ(auth) –

+0

http.Dir(" frontend/build/static/")doesn正しいパスを指定しないでください。マシンのルートを示すためにパスを "/"で始める必要があります(パスは/ home/myuser/myapp/staticのようになります)か、 "./"を使用して現在のディレクトリを指定してくださいあなたのパスの始点から(つまり、あなたが "/ home/myuser/myapp /"から実行している場合、 "./"はそれに翻訳されます) – George