8.3 服务器统一出错处理
一、进行统一错误处理
实现统一错误逻辑处理方法
使用http请求读取文件的方式进行错误的处理
包括文件不存在,文件没有权限读等
// 主方法 package main import ( "imooc-learn/8/filelistingserver/filelisting" "net/http" "os" ) // 定义访问的方法 type appHandler func(writer http.ResponseWriter, request *http.Request) error // 进行统一异常处理,函数式编程,输入一个函数,包装后变成输出的函数输出 func errWrapper(handler appHandler) func(http.ResponseWriter, *http.Request) { return func(writer http.ResponseWriter, request *http.Request) { // 接收错误 err := handler(writer, request) // 错误处理 if err != nil { // log.Warn("Error handling request: %s", err.Error()) code := http.StatusOK switch { // 未找到 404 case os.IsNotExist(err): code = http.StatusNotFound // 没有权限 401 case os.IsPermission(err): code = http.StatusUnauthorized // 其他错误 500 default: code = http.StatusInternalServerError } // 错误输出 http.Error(writer, http.StatusText(code), code) } } } func main() { http.HandleFunc("/list/", errWrapper(filelisting.HandleFileList)) err := http.ListenAndServe(":8888", nil) if err != nil { panic(err) } } // 拦截请求的方法 package filelisting import ( "io/ioutil" "net/http" "os" ) func HandleFileList(writer http.ResponseWriter, request *http.Request) error { path := request.URL.Path[len("/list/"):] file, err := os.Open(path) if err != nil { return err } defer file.Close() all, err := ioutil.ReadAll(file) if err != nil { return err } writer.Write(all) return nil }
Last updated
Was this helpful?