为了账号安全,请及时绑定邮箱和手机立即绑定

使用 github.com/julienschmidt/httprouter

使用 github.com/julienschmidt/httprouter

Go
守着星空守着你 2021-12-20 09:52:38
所以我试图为 html 模板提供静态 css 和 java 脚本,但参数阻碍了我这样做的能力。这是我的代码package mainimport (    "net/http"    "html/template"    "github.com/julienschmidt/httprouter"    "fmt")type PageData struct {    Chapter int    Page int    Source string}func main(){    //I'm using the julienschmidt router because it has parameters that I can use    //Create a router    router := httprouter.New()    //Create the route with the parameters    router.GET("/:chapter/:page",paramHandler)    //Create the default route last    router.GET("/",defaultHandler)    //get all of the static files working    router.ServeFiles("/:chapter/:page/*filepath",http.Dir("/js/"))    //http.Handle("/js/",http.StripPrefix("/js/",http.FileServer(http.Dir("./public/js/"))))    //http.Handle("/viewjs/",http.StripPrefix("/viewjs/",http.FileServer(http.Dir("./public/viewjs/"))))    //crate a message telling the user which port the server is running on    fmt.Println("Now serving on port 8080")    //Start the server on the specified port    http.ListenAndServe(":8080",router)}func defaultHandler(rw http.ResponseWriter,r *http.Request,p httprouter.Params){    //Parse the html file    index := template.Must(template.ParseFiles("public/index.html"))    chapter := 1    page := 1    //Get data from server    //TODO    //Test Data    //defaultPage := PageData{Chapter:chapter,Page:page,Source:"http://lokeshdhakar.com/projects/lightbox2/images/image-4.jpg"}    //Send the html file to the browser    fmt.Printf("\nThe chapter is %d and the page is %d",chapter,page)    index.Execute(rw,nil)}func paramHandler(rw http.ResponseWriter,r*http.Request,p httprouter.Params){    index := template.Must(template.ParseFiles("public/index.html"))    //Get the page parameters    chapter := p.ByName("chapter")    page:= p.ByName("page")    //Get data from server    //TODO所以基本上,我想根据章节和页面变量提供不同的图像(这不是我当前的问题,但这是我需要 url 参数的原因),但路由器认为静态文件路径(我用来服务js和css)充满了参数。我试图将“/foo/foo/”添加到html中每个路径的begging中,
查看完整描述

1 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

我建议你重组你的项目文件


├── main.go

├── templates/

│   ├── index.html

├── assets/

    ├── js/

    └── react/

使用以下处理程序


router.GET("/", defaultHandler)

router.GET("/chapters/:chapter/pages/:page", paramHandler)

router.ServeFiles("/assets/*filepath", http.Dir("assets"))

并更改您的脚本源以包含完整路径,例如


/assets/js/react/build/react.js

如果 httprouter 可以匹配路由,事情会容易得多


router.GET("/:chapter/:page", paramHandler)

router.ServeFiles("/*filepath", http.Dir("assets"))


仅显式匹配:通过此路由器的设计,请求只能匹配一条路由或不匹配路由。


https://github.com/julienschmidt/httprouter#features


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信