reactjsプロジェクトでreact-routerとbrowserHistoryのpushStateを使用しています。このプロジェクトでは、ユーザーが新しいパスを作成するノートを作成できます。このタイプのサイトを提供するには、静的コンテンツ以外のすべてのパスに同じHTMLファイルを提供する必要があります。だから私のnodejsコードはこのように見えます。Goで動的に作成されたURLパスをどのように提供するのですか?
// Serve the static content
app.use('/static/css/', express.static(path.join(__dirname, '../../react-ui/build/static/css')));
app.use('/static/js/', express.static(path.join(__dirname, '../../react-ui/build/static/js')));
app.use('/static/media/', express.static(path.join(__dirname, '../../react-ui/build/static/media')));
app.use('/static/img/', express.static(path.join(__dirname, '../../react-ui/build/static/img')));
app.use('/img/', express.static(path.join(__dirname, '../../react-ui/build/img')));
// Serve the same HTML file to everything else
app.use('*', express.static(path.join(__dirname, '../../react-ui/build')));
Go FileServerのワイルドカードサポートはありません。現在、私は静的なページをこのようなGoコードを使って提供しています。
package main
import (
"net/http"
)
func init(){
fs := http.FileServer(http.Dir("web"))
http.Handle("/", fs)
http.Handle("/static-page-1/", http.StripPrefix("/static-page-1/", fs))
http.Handle("/static-page-2/", http.StripPrefix("/static-page-2/", fs))
http.Handle("/static-page-3/", http.StripPrefix("/static-page-3/", fs))
}
Goサーバーで動的に生成されたURLパスにコンテンツを提供することは可能ですか?ハンドル方法は、変数をサポートしている場合
は、私はその中のユーザタイプは静的/パス/下にない任意の経路であろうこの
fs := http.FileServer(http.Dir("web"))
http.Handle("/static/", fs)
http.Handle("/{unknownUserPath}", http.StripPrefix("/{unknownUserPath}", fs))
{unknownUserPath}のようなコードを書くだろう。ここで
は、外出先のプロジェクト構造
はここ@putu答え
package main
import (
"net/http"
"strings"
)
func adaptFileServer(fs http.Handler) http.Handler {
fn := func(w http.ResponseWriter, req *http.Request) {
staticIndex := strings.Index(req.URL.Path, "/static/");
imgIndex := strings.Index(req.URL.Path, "/img/");
if staticIndex == -1 && imgIndex == -1 {
fsHandler := http.StripPrefix(req.URL.Path, fs)
fsHandler.ServeHTTP(w, req)
} else {
fs.ServeHTTP(w, req)
}
}
return http.HandlerFunc(fn)
}
func init() {
fs := http.FileServer(http.Dir("web"))
http.Handle("/", adaptFileServer(fs))
}
ありがとう! muxサーバーオブジェクトなしでファイルサーバーを動作させることができましたが、サービスを追加したい場合は、それを使用する必要があります。私は私の質問に使用しているコードを追加しました – sissonb