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