urls inspección inspeccionar herramienta google web-applications go mux

web-applications - inspeccionar - herramienta de inspección de urls google



Sirviendo contenido estático con una URL raíz con el kit de herramientas Gorilla (5)

Creo que podrías estar buscando 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) }

Estoy intentando utilizar el paquete mux del kit de herramientas de Gorilla para enrutar las URL en un servidor web Go. Usando esta pregunta como guía, tengo el siguiente código 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) }

La estructura del directorio es:

... main.go static/ | index.html | js/ | <js files> | css/ | <css files>

Los archivos Javascript y CSS se referencian en index.html siguiente manera:

... <link rel="stylesheet" href="css/redmond/jquery-ui.min.css"/> <script src="js/jquery.min.js"></script> ...

Cuando accedo a http://localhost:8100 en mi navegador web, el contenido index.html se entrega con éxito, sin embargo, todas las URL js y css devuelven 404s.

¿Cómo puedo hacer para que el programa sirva archivos de subdirectorios static ?


Después de muchas pruebas y errores, las dos respuestas anteriores me ayudaron a encontrar lo que funcionó para mí. Tengo una carpeta estática en el directorio raíz de la aplicación web.

Junto con PathPrefix tuve que usar StripPrefix para que la ruta funcione recursivamente.

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) }

Espero que ayude a alguien más a tener problemas.


Esto sirve todos los archivos dentro de la bandera de la carpeta, así como servir index.html en la raíz.

Uso

//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 ./

Código

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)) }


Prueba esto:

fileHandler := http.StripPrefix("/static/", http.FileServer(http.Dir("/absolute/path/static"))) http.Handle("/static/", fileHandler)


Tengo este código aquí que funciona bastante bien y es reutilizable.

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/")