mic*_*oo8 1 http go httprouter
我使用httprouter从API调用路径解析的一些参数:
router := httprouter.New()
router.GET("/api/:param1/:param2", apiHandler)
Run Code Online (Sandbox Code Playgroud)
并希望将一些文件添加到根目录(/
)进行投放。这只是index.html
,script.js
和style.css
。全部位于名为static
router.ServeFiles("/*filepath", http.Dir("static"))
Run Code Online (Sandbox Code Playgroud)
这样我就可以与浏览器一起使用localhost:8080/
,它将开始提供服务index.html
,而js
来自浏览器的会调用/api/:param1/:param2
但是此路径与路径冲突/api
。
panic: wildcard route '*filepath' conflicts with existing children in path '/*filepath'
正如其他人指出的那样,仅使用不可能github.com/julienschmidt/httprouter
。
请注意,这可以使用标准库的多路复用器来实现,如以下答案所述:我如何通过使用相同的端口地址和不同的句柄模式来服务网页和API路由
如果您必须从根本上提供所有Web内容,那么另一个可行的解决方案是将标准路由器和混合使用julienschmidt/httprouter
。使用标准路由器在根目录处注册和提供文件,并用于julienschmidt/httprouter
提供API请求。
它看起来像这样:
router := httprouter.New()
router.GET("/api/:param1/:param2", apiHandler)
mux := http.NewServeMux()
mux.Handle("/", http.FileServer(http.Dir("static")))
mux.Handle("/api/", router)
log.Fatal(http.ListenAndServe(":8080", mux))
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,所有以开头的请求/api/
都将转发到router
处理程序,其余的将由文件服务器尝试处理。
归档时间: |
|
查看次数: |
1107 次 |
最近记录: |