2017-11-30 25 views
1

私は静的ファイルをGoで処理していますが、いくつかのチュートリアルやその他のSOの回答(herehere)に従ってください。 I には他にも数多くの類似の質問がありましたが、答えは私のために働いていません。私は他の質問のほとんどとは少し違う経路を実装しているので、問題の原因となっている微妙な問題があるのだろうかと思っていますが、残念ながら私のGoスキルはそれが何であるか見るのに十分なほど磨かれていません。私のコードは以下の通りです(ハンドラのコードは関係ないはずですので除外しました)。gorilla/muxを使用してGoで静的ファイルを処理する

package main 

import (
    "net/http" 

    "github.com/gorilla/mux" 
) 

func NewRouter() *mux.Router { 
    router := mux.NewRouter().StrictSlash(true) 

    for _, route := range routes { 
     var handler http.Handler 

     handler = route.HandlerFunc 
     handler = Logger(handler, route.Name) 

     router. 
      Methods(route.Method). 
      Path(route.Path). 
      Name(route.Name). 
      Handler(handler) 
    } 

    // This should work? 
    fs := http.FileServer(http.Dir("./static")) 
    router.PathPrefix("/static/").Handler(http.StripPrefix("/static/", fs)) 

    return router 
} 

router.go

package main 

import (
    "net/http" 

    "web-api/app/handlers" 
) 

type Route struct { 
    Name  string 
    Method  string 
    Path  string 
    HandlerFunc http.HandlerFunc 
} 

type Routes []Route 

var routes = Routes{ 
    Route{ 
     "Index", 
     "GET", 
     "/", 
     handlers.Index, 
    }, 
    Route{ 
     "Login", 
     "GET", 
     "/login", 
     handlers.GetLogin, 
    }, 
    Route{ 
     "Login", 
     "POST", 
     "/login", 
     handlers.PostLogin, 
    }, 
} 

main.go

... 

func main() { 

    router := NewRouter() 

    log.Fatal(http.ListenAndServe(":8080", router)) 
} 

routes.goマイファイル構造をs etupとして:ブラウザがアクセスすることはできませんいくつかの理由

- app 
    - main.go 
    - router.go 
    - routes.go 
    - static/ 
     - stylesheets/ 
      - index.css 

はlocalhost:8080 /静的/スタイルシート/ index.css

+0

あなたは 'app'ディレクトリからアプリケーションを実行していますか?パス '。/ static'は、ソースファイルではなく、現在の作業ディレクトリからの相対パスです。 –

+0

私はappの親ディレクトリからビルドしていました。それは_inside_ appの作品です。ありがとうございました!回答として残しておけば、あなたの答えを正しいものとしてマークします。絶対パスを使用するとどこからでも構築できますか? –

+0

これは、アプリケーションをビルドする場所とは関係ありません。これは、アプリケーションを実行する場所の現在の作業ディレクトリに依存します。 –

答えて

2

ファイルのパスコードを調達するのではなく、現在の作業ディレクトリに対して相対的ですパスを参照するファイル。

アプリケーションのファイルサーバー構成は、appディレクトリが現在の作業ディレクトリであることを前提としています。アプリケーションを実行する前に、ディレクトリをappディレクトリに変更してください。

関連する問題