我正在尝试通过编写自定义的 not-found 处理程序来调试 404-not-found。这是我的代码。package mainimport ( "database/sql" "encoding/json" "fmt" "log" "net/http" "github.com/coopernurse/gorp" _ "github.com/go-sql-driver/mysql" "github.com/gorilla/mux")func main() { // Create a MUX r := mux.NewRouter() http.Handle("/", r) r.NotFoundHandler = http.HandlerFunc(NotFound) // Static r.PathPrefix("/app").HandlerFunc(uiAppHandler) err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal(err) }}func NotFound(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "custom 404")}func uiAppHandler(w http.ResponseWriter, r *http.Request) { repoFrontend1 := "/UI/KD/WebContent" http.StripPrefix("/app/", http.FileServer(http.Dir(repoFrontend1)))}对于现有和不存在的文件,我都收到空白响应。我猜 NotFound 没有被触发,因为我的“/”处理程序。那么我如何处理 http.Dir 的 notFound 呢?这是我的目录结构
1 回答
MYYA
TA贡献1868条经验 获得超4个赞
来自的响应uiAppHandler
为空,因为该函数不写入响应w
。您应该直接使用 mux 注册文件服务器处理程序,而不是尝试创建处理程序:
r.PathPrefix("/app").Handler(http.StripPrefix("/app/", http.FileServer(http.Dir(repoFrontend1))))
多路复用器将所有带有前缀“/app”的请求传递给为该前缀注册的处理程序。就多路复用器而言,所有具有该前缀的请求都会被找到。http.FileServer 或您为该前缀注册的任何内容负责生成 404 响应。
- 1 回答
- 0 关注
- 145 浏览
添加回答
举报
0/150
提交
取消