2017-10-13 14 views
0

fasthttpフレームワークを使用して複数のディレクトリを提供する方法はありますか?私は同じ目的のために以下のコードを書いた。しかし、このコードは期待どおりに機能していません。私ははlocalhostにアクセスする場合: - 127.0 8080 /パス1を、それがエラーや警告をスローし、fasthttp:複数のDirサービスが動作していません

2017年10月13日午後4時57分01秒0.977#0000000100000001要求されたパスを開くことができません。 0.1:8080 < - > 127.0.0.1:48870 - GET http://localhost:8080/path1 - ファイルを開くことができません "/ホーム/テスト/パス1": オープン /ホーム/テスト/パス1 /パス1: そのようなファイルやディレクトリ

このurl(/ home/test/path1)がどのように(/ home/test/path1/path1)にリダイレクトされるのかわかりません。以下のコードで何が問題になっていますか?

requestHandler := func(ctx *fasthttp.RequestCtx) { 
     var fs fasthttp.FS 
     switch string(ctx.Path()) { 
     case "/path1": 
      fs = fasthttp.FS{ 
       Root:  "/home/test/path1", 
       IndexNames: []string{"index.html"}, 
      } 
     case "/path2": 
      fs = fasthttp.FS{ 
       Root:  "/home/test/path2", 
       IndexNames: []string{"index.html"}, 
      } 
     } 
     fsHandler := fs.NewRequestHandler() 
     fsHandler(ctx) 
    } 

    if err := fasthttp.ListenAndServe(":8080", requestHandler); err != nil { 
     fmt.Println("error in ListenAndServe: %s", err) 
    } 
+0

[Webサーバーでファイルを探す場所](https://stackoverflow.com/questions/46093251/where-does-go-web-server-look-for-the-files)の可能な複製 – Flimzy

答えて

1

何も間違っていない、あなたはそれを書いたとおりに動作します:ウェブサーバの ルート:/home/test/path1を。 http://bla/path1をリクエストしてください。これは、http://bla/ - >/home/path/path1/index.htmlに変換されます。 http://bla/path1 - >/home/path/path1/path1/index.html

2つのディレクトリを扱っている場合、他の通常のHTTPサーバと同じように、同じRootを持つ必要があります。それ以外の場合は、仮想ホストのサポートを調べます。

+1

デフォルトのgolangのHTTPサーバーがこの問題を解決しました - https://stackoverflow.com/questions/43600768/multiple-dir-serving-is-not-working/43600923#43600923 - FYI – sprabhakaran

+0

この問題のデフォルトのgolangのHTTPサーバーの実装は完全ですこの例ではコードワイズなこととは異なります。そこには2つの異なるハンドラインスタンスがあります。ここでは、1つのハンドラで2つの異なるディレクトリを扱いたいとします。 – favoretti

関連する問題