반응형
Gorilla 툴킷을 사용하여 루트 URL로 정적 콘텐츠 제공
Go 웹 서버에서 URL을 라우팅 하기 위해 Gorilla 툴킷의 mux
패키지 를 사용하려고 합니다. 이 질문 을 가이드로 사용 하면 다음 Go 코드가 있습니다.
func main() {
r := mux.NewRouter()
r.Handle("/", http.FileServer(http.Dir("./static/")))
r.HandleFunc("/search/{searchTerm}", Search)
r.HandleFunc("/load/{dataId}", Load)
http.Handle("/", r)
http.ListenAndServe(":8100", nil)
}
디렉토리 구조는 다음과 같습니다.
...
main.go
static\
| index.html
| js\
| <js files>
| css\
| <css files>
Javascript 및 CSS 파일은 index.html
다음과 같이 참조됩니다 .
...
<link rel="stylesheet" href="css/redmond/jquery-ui.min.css"/>
<script src="js/jquery.min.js"></script>
...
http://localhost:8100
내 웹 브라우저에서 액세스 하면 index.html
콘텐츠가 성공적으로 전달되지만 모든 js
및 css
URL이 404를 반환합니다.
프로그램이 static
하위 디렉토리에서 파일을 제공하도록하려면 어떻게 해야합니까?
나는 당신이 찾고있을 것이라고 생각합니다 PathPrefix
...
func main() {
r := mux.NewRouter()
r.HandleFunc("/search/{searchTerm}", Search)
r.HandleFunc("/load/{dataId}", Load)
r.PathPrefix("/").Handler(http.FileServer(http.Dir("./static/")))
http.ListenAndServe(":8100", r)
}
많은 시행 착오 끝에 위의 두 답변 모두 나를 위해 일한 것을 생각해내는 데 도움이되었습니다. 웹 앱의 루트 디렉터리에 정적 폴더가 있습니다.
함께 작업 경로를 재귀 적으로 가져 오는 데 PathPrefix
사용해야 StripPrefix
했습니다.
package main
import (
"log"
"net/http"
"github.com/gorilla/mux"
)
func main() {
r := mux.NewRouter()
s := http.StripPrefix("/static/", http.FileServer(http.Dir("./static/")))
r.PathPrefix("/static/").Handler(s)
http.Handle("/", r)
err := http.ListenAndServe(":8081", nil)
}
문제가있는 다른 사람에게 도움이되기를 바랍니다.
여기에 꽤 잘 작동하고 재사용 할 수있는이 코드가 있습니다.
func ServeStatic(router *mux.Router, staticDirectory string) {
staticPaths := map[string]string{
"styles": staticDirectory + "/styles/",
"bower_components": staticDirectory + "/bower_components/",
"images": staticDirectory + "/images/",
"scripts": staticDirectory + "/scripts/",
}
for pathName, pathValue := range staticPaths {
pathPrefix := "/" + pathName + "/"
router.PathPrefix(pathPrefix).Handler(http.StripPrefix(pathPrefix,
http.FileServer(http.Dir(pathValue))))
}
}
router := mux.NewRouter()
ServeStatic(router, "/static/")
이 시도:
fileHandler := http.StripPrefix("/static/", http.FileServer(http.Dir("/absolute/path/static")))
http.Handle("/static/", fileHandler)
이것은 폴더 플래그 내의 모든 파일을 제공하고 루트에서 index.html을 제공합니다.
용법
//port default values is 8500
//folder defaults to the current directory
go run main.go
//your case, dont forget the last slash
go run main.go -folder static/
//dont
go run main.go -folder ./
암호
package main
import (
"flag"
"fmt"
"net/http"
"os"
"strconv"
"strings"
"github.com/gorilla/handlers"
"github.com/gorilla/mux"
"github.com/kr/fs"
)
func main() {
mux := mux.NewRouter()
var port int
var folder string
flag.IntVar(&port, "port", 8500, "help message for port")
flag.StringVar(&folder, "folder", "", "help message for folder")
flag.Parse()
walker := fs.Walk("./" + folder)
for walker.Step() {
var www string
if err := walker.Err(); err != nil {
fmt.Fprintln(os.Stderr, "eroooooo")
continue
}
www = walker.Path()
if info, err := os.Stat(www); err == nil && !info.IsDir() {
mux.HandleFunc("/"+strings.Replace(www, folder, "", -1), func(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, www)
})
}
}
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, folder+"index.html")
})
http.ListenAndServe(":"+strconv.Itoa(port), handlers.LoggingHandler(os.Stdout, mux))
}
반응형
'programing' 카테고리의 다른 글
AMD (require.js)를 사용하는 동안 Backbone.js에서 부트 스트랩 된 모델을로드하는 방법 (0) | 2021.01.17 |
---|---|
Visual Studio가없는 컴퓨터에서 원격 디버깅을 설정하는 방법 (0) | 2021.01.17 |
어떻게“a <= b && b <= a && a! = b”가 참일 수 있습니까? (0) | 2021.01.17 |
VSCode에서 사용자 지정 코드 조각을 추가하는 방법은 무엇입니까? (0) | 2021.01.17 |
LinearLayoutManager를 사용하여 RecyclerView에서 맨 위로 스크롤 (0) | 2021.01.17 |