幕布斯7119047
使用标准库实际实现type Adapter func(http.Handler) http.Handler// Adapt function to enable middlewares on the standard libraryfunc Adapt(h http.Handler, adapters ...Adapter) http.Handler { for _, adapter := range adapters { h = adapter(h) } return h}// Creates a new serve muxmux := http.NewServeMux()// Create room for static files servingmux.Handle("/node_modules/", http.StripPrefix("/node_modules", http.FileServer(http.Dir("./node_modules"))))mux.Handle("/html/", http.StripPrefix("/html", http.FileServer(http.Dir("./html"))))mux.Handle("/js/", http.StripPrefix("/js", http.FileServer(http.Dir("./js"))))mux.Handle("/ts/", http.StripPrefix("/ts", http.FileServer(http.Dir("./ts"))))mux.Handle("/css/", http.StripPrefix("/css", http.FileServer(http.Dir("./css"))))// Do your api stuff**mux.Handle("/api/register", Adapt(api.RegisterHandler(mux), api.GetMongoConnection(), api.CheckEmptyUserForm(), api.EncodeUserJson(), api.ExpectBody(), api.ExpectPOST(),))mux.HandleFunc("/api/login", api.Login)mux.HandleFunc("/api/authenticate", api.Authenticate)// Any other request, we should render our SPA's only html file,// Allowing angular to do the routing on anything else other then the api // and the files it needs for itself to work.// Order here is critical. This html should contain the base tag like// <base href="/"> *href here should match the HandleFunc path below mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "html/index.html")})