diff --git a/code/rest/alien_service.go b/code/rest/alien_service.go index 2624b0c..2e4c92a 100644 --- a/code/rest/alien_service.go +++ b/code/rest/alien_service.go @@ -94,7 +94,7 @@ func (this *AlienService) PreviewOrDownload( tokenUser := this.userDao.CheckByUuid(downloadToken.UserUuid) if matter.UserUuid != tokenUser.Uuid { - panic(result.CODE_WRAPPER_UNAUTHORIZED) + panic(result.UNAUTHORIZED) } //下载之后立即过期掉。如果是分块下载的,必须以最终获取到完整的数据为准。 @@ -106,7 +106,7 @@ func (this *AlienService) PreviewOrDownload( //判断文件的所属人是否正确 operator := this.findUser(writer, request) if operator == nil || (operator.Role != USER_ROLE_ADMINISTRATOR && matter.UserUuid != operator.Uuid) { - panic(result.CODE_WRAPPER_UNAUTHORIZED) + panic(result.UNAUTHORIZED) } } diff --git a/code/rest/base_bean.go b/code/rest/base_bean.go index d3787aa..0a410ca 100644 --- a/code/rest/base_bean.go +++ b/code/rest/base_bean.go @@ -65,7 +65,7 @@ func (this *BaseBean) findUser(writer http.ResponseWriter, request *http.Request //获取当前登录的用户,找不到就返回登录错误 func (this *BaseBean) checkUser(writer http.ResponseWriter, request *http.Request) *User { if this.findUser(writer, request) == nil { - panic(result.ConstWebResult(result.CODE_WRAPPER_LOGIN)) + panic(result.ConstWebResult(result.LOGIN)) } else { return this.findUser(writer, request) } diff --git a/code/rest/base_controller.go b/code/rest/base_controller.go index 6180d03..31bea44 100644 --- a/code/rest/base_controller.go +++ b/code/rest/base_controller.go @@ -58,10 +58,10 @@ func (this *BaseController) Wrap(f func(writer http.ResponseWriter, request *htt if user.Status == USER_STATUS_DISABLED { //判断用户是否被禁用。 - webResult = result.ConstWebResult(result.CODE_WRAPPER_USER_DISABLED) + webResult = result.ConstWebResult(result.USER_DISABLED) } else { if qualifiedRole == USER_ROLE_ADMINISTRATOR && user.Role != USER_ROLE_ADMINISTRATOR { - webResult = result.ConstWebResult(result.CODE_WRAPPER_UNAUTHORIZED) + webResult = result.ConstWebResult(result.UNAUTHORIZED) } else { webResult = f(writer, request) } @@ -98,16 +98,16 @@ func (this *BaseController) Success(data interface{}) *result.WebResult { var webResult *result.WebResult = nil if value, ok := data.(string); ok { //返回一句普通的消息 - webResult = &result.WebResult{Code: result.CODE_WRAPPER_OK.Code, Msg: value} + webResult = &result.WebResult{Code: result.OK.Code, Msg: value} } else if value, ok := data.(*result.WebResult); ok { //返回一个webResult对象 webResult = value } else if _, ok := data.(types.Nil); ok { //返回一个空指针 - webResult = result.ConstWebResult(result.CODE_WRAPPER_OK) + webResult = result.ConstWebResult(result.OK) } else { //返回的类型不明确。 - webResult = &result.WebResult{Code: result.CODE_WRAPPER_OK.Code, Data: data} + webResult = &result.WebResult{Code: result.OK.Code, Data: data} } return webResult } diff --git a/code/rest/dav_controller.go b/code/rest/dav_controller.go index 1d52401..0bdb19a 100644 --- a/code/rest/dav_controller.go +++ b/code/rest/dav_controller.go @@ -80,7 +80,7 @@ func (this *DavController) CheckCurrentUser(writer http.ResponseWriter, request //要求前端使用Basic的形式授权 writer.Header().Set("WWW-Authenticate", `Basic realm="Restricted"`) - panic(result.ConstWebResult(result.CODE_WRAPPER_LOGIN)) + panic(result.ConstWebResult(result.LOGIN)) } diff --git a/code/rest/matter_controller.go b/code/rest/matter_controller.go index 161224e..8cc413d 100644 --- a/code/rest/matter_controller.go +++ b/code/rest/matter_controller.go @@ -16,6 +16,7 @@ type MatterController struct { downloadTokenDao *DownloadTokenDao imageCacheDao *ImageCacheDao shareDao *ShareDao + shareService *ShareService bridgeDao *BridgeDao imageCacheService *ImageCacheService } @@ -50,6 +51,11 @@ func (this *MatterController) Init() { this.shareDao = b } + b = core.CONTEXT.GetBean(this.shareService) + if b, ok := b.(*ShareService); ok { + this.shareService = b + } + b = core.CONTEXT.GetBean(this.bridgeDao) if b, ok := b.(*BridgeDao); ok { this.bridgeDao = b @@ -136,25 +142,14 @@ func (this *MatterController) Page(writer http.ResponseWriter, request *http.Req if puuid == "" { panic(result.BadRequest("puuid必填!")) } + dirMatter := this.matterDao.CheckByUuid(puuid) if !dirMatter.Dir { panic(result.BadRequest("puuid 对应的不是文件夹")) } - share := this.shareDao.CheckByUuid(shareUuid) - //如果是自己的分享,可以不要提取码 user := this.findUser(writer, request) - if user == nil { - if share.Code != shareCode { - panic(result.Unauthorized("提取码错误!")) - } - } else { - if user.Uuid != share.UserUuid { - if share.Code != shareCode { - panic(result.Unauthorized("提取码错误!")) - } - } - } + share := this.shareService.CheckShare(shareUuid, shareCode, user) //验证 shareRootMatter是否在被分享。 shareRootMatter := this.matterDao.CheckByUuid(shareRootUuid) diff --git a/code/rest/share_controller.go b/code/rest/share_controller.go index e8a2172..f00689d 100644 --- a/code/rest/share_controller.go +++ b/code/rest/share_controller.go @@ -282,37 +282,26 @@ func (this *ShareController) CheckShare(writer http.ResponseWriter, request *htt //如果是根目录,那么就传入root. shareUuid := request.FormValue("shareUuid") code := request.FormValue("code") - - share := this.shareDao.CheckByUuid(shareUuid) - //如果是自己的分享,可以不要提取码 user := this.findUser(writer, request) - if user == nil { - if share.Code != code { - panic(result.Unauthorized("提取码错误!")) - } - } else { - if user.Uuid != share.UserUuid { - if share.Code != code { - panic(result.Unauthorized("提取码错误!")) - } - } - } - - return share + return this.shareService.CheckShare(shareUuid, code, user) } //浏览某个分享中的文件 func (this *ShareController) Browse(writer http.ResponseWriter, request *http.Request) *result.WebResult { - //要求传参:shareUuid,code - share := this.CheckShare(writer, request) - bridges := this.bridgeDao.ListByShareUuid(share.Uuid) + //如果是根目录,那么就传入root. + shareUuid := request.FormValue("shareUuid") + code := request.FormValue("code") //当前查看的puuid。 puuid=root表示查看分享的根目录,其余表示查看某个文件夹下的文件。 puuid := request.FormValue("puuid") rootUuid := request.FormValue("rootUuid") + user := this.findUser(writer, request) + share := this.shareService.CheckShare(shareUuid, code, user) + bridges := this.bridgeDao.ListByShareUuid(share.Uuid) + if puuid == "" { puuid = MATTER_ROOT } diff --git a/code/rest/share_service.go b/code/rest/share_service.go index a740bd5..c66c9db 100644 --- a/code/rest/share_service.go +++ b/code/rest/share_service.go @@ -2,6 +2,8 @@ package rest import ( "github.com/eyebluecn/tank/code/core" + "github.com/eyebluecn/tank/code/tool/result" + "time" ) //@Service @@ -35,3 +37,26 @@ func (this *ShareService) Detail(uuid string) *Share { return share } + +//验证一个shareUuid和shareCode是否匹配和有权限。 +func (this *ShareService) CheckShare(shareUuid string, code string, user *User) *Share { + + share := this.shareDao.CheckByUuid(shareUuid) + //如果是自己的分享,可以不要提取码 + if user == nil || user.Uuid != share.UserUuid { + //没有登录,或者查看的不是自己的分享,要求有验证码 + if code == "" { + panic(result.CustomWebResult(result.NEED_SHARE_CODE, "提取码必填")) + } else if share.Code != code { + panic(result.CustomWebResult(result.SHARE_CODE_ERROR, "提取码错误")) + } else { + if !share.ExpireInfinity { + if share.ExpireTime.Before(time.Now()) { + panic(result.BadRequest("分享已过期")) + } + } + } + } + + return share +} diff --git a/code/support/tank_application.go b/code/support/tank_application.go index f1bd536..520dedb 100644 --- a/code/support/tank_application.go +++ b/code/support/tank_application.go @@ -200,7 +200,7 @@ func (this *TankApplication) HandleMirror() { return } - if webResult.Code == result.CODE_WRAPPER_OK.Code { + if webResult.Code == result.OK.Code { fmt.Println("success") } else { fmt.Printf("error %s\r\n", webResult.Msg) @@ -247,7 +247,7 @@ func (this *TankApplication) HandleCrawl() { return } - if webResult.Code == result.CODE_WRAPPER_OK.Code { + if webResult.Code == result.OK.Code { fmt.Println("success") } else { fmt.Printf("error %s\r\n", webResult.Msg) diff --git a/code/support/tank_router.go b/code/support/tank_router.go index a886904..69be22f 100644 --- a/code/support/tank_router.go +++ b/code/support/tank_router.go @@ -102,7 +102,7 @@ func (this *TankRouter) GlobalPanicHandler(writer http.ResponseWriter, request * var webResult *result.WebResult = nil if value, ok := err.(string); ok { //一个字符串,默认是请求错误。 - webResult = result.CustomWebResult(result.CODE_WRAPPER_BAD_REQUEST, value) + webResult = result.CustomWebResult(result.BAD_REQUEST, value) } else if value, ok := err.(*result.WebResult); ok { //一个WebResult对象 webResult = value @@ -111,10 +111,10 @@ func (this *TankRouter) GlobalPanicHandler(writer http.ResponseWriter, request * webResult = result.ConstWebResult(value) } else if value, ok := err.(error); ok { //一个普通的错误对象 - webResult = result.CustomWebResult(result.CODE_WRAPPER_UNKNOWN, value.Error()) + webResult = result.CustomWebResult(result.UNKNOWN, value.Error()) } else { //其他不能识别的内容 - webResult = result.ConstWebResult(result.CODE_WRAPPER_UNKNOWN) + webResult = result.ConstWebResult(result.UNKNOWN) } //修改http code码 @@ -176,7 +176,7 @@ func (this *TankRouter) ServeHTTP(writer http.ResponseWriter, request *http.Requ } if !canHandle { - panic(result.CustomWebResult(result.CODE_WRAPPER_NOT_FOUND, fmt.Sprintf("没有找到能够处理%s的方法", path))) + panic(result.CustomWebResult(result.NOT_FOUND, fmt.Sprintf("没有找到能够处理%s的方法", path))) } } @@ -190,7 +190,7 @@ func (this *TankRouter) ServeHTTP(writer http.ResponseWriter, request *http.Requ if handler, ok := this.installRouteMap[path]; ok { handler(writer, request) } else { - panic(result.ConstWebResult(result.CODE_WRAPPER_NOT_INSTALLED)) + panic(result.ConstWebResult(result.NOT_INSTALLED)) } } diff --git a/code/tool/cache/cache.go b/code/tool/cache/cache.go index 6809796..bea4b6c 100644 --- a/code/tool/cache/cache.go +++ b/code/tool/cache/cache.go @@ -3,7 +3,6 @@ package cache import ( "errors" "fmt" - "github.com/eyebluecn/tank/code/tool/util" "sort" "sync" "time" @@ -148,6 +147,18 @@ func (table *Table) SetDeleteCallback(f func(*Item)) { table.deleteCallback = f } +//带有panic恢复的方法 +func (table *Table) RunWithRecovery(f func()) { + defer func() { + if err := recover(); err != nil { + //core.LOGGER.Error("异步任务错误: %v", err) + } + }() + + //执行函数 + f() +} + //终结检查,被自调整的时间触发 func (table *Table) checkExpire() { table.Lock() @@ -197,7 +208,7 @@ func (table *Table) checkExpire() { table.cleanupInterval = smallestDuration if smallestDuration > 0 { table.cleanupTimer = time.AfterFunc(smallestDuration, func() { - go util.RunWithRecovery(table.checkExpire) + go table.RunWithRecovery(table.checkExpire) }) } table.Unlock() @@ -387,8 +398,7 @@ func (table *Table) MostAccessed(count int64) []*Item { // 打印日志 func (table *Table) log(format string, v ...interface{}) { - //TODO: 全局日志记录 - //LOGGER.Info(format, v...) + //core.LOGGER.Info(format, v...) } //新建一个缓存Table diff --git a/code/tool/download/download.go b/code/tool/download/download.go index cac5925..774fb3a 100644 --- a/code/tool/download/download.go +++ b/code/tool/download/download.go @@ -286,7 +286,7 @@ func DownloadFile( if size >= 0 { ranges, err := ParseRange(rangeReq, size) if err != nil { - panic(result.CustomWebResult(result.CODE_WRAPPER_RANGE_NOT_SATISFIABLE, "range header出错")) + panic(result.CustomWebResult(result.RANGE_NOT_SATISFIABLE, "range header出错")) } if SumRangesSize(ranges) > size { // The total number of bytes in all the ranges @@ -310,7 +310,7 @@ func DownloadFile( // be sent using the multipart/byteranges media type." ra := ranges[0] if _, err := diskFile.Seek(ra.start, io.SeekStart); err != nil { - panic(result.CustomWebResult(result.CODE_WRAPPER_RANGE_NOT_SATISFIABLE, "range header出错")) + panic(result.CustomWebResult(result.RANGE_NOT_SATISFIABLE, "range header出错")) } sendSize = ra.length code = http.StatusPartialContent diff --git a/code/tool/result/web_result.go b/code/tool/result/web_result.go index 4118d82..b5c2a7b 100644 --- a/code/tool/result/web_result.go +++ b/code/tool/result/web_result.go @@ -22,55 +22,61 @@ type CodeWrapper struct { } var ( - CODE_WRAPPER_OK = &CodeWrapper{Code: "OK", HttpStatus: http.StatusOK, Description: "成功"} - CODE_WRAPPER_BAD_REQUEST = &CodeWrapper{Code: "BAD_REQUEST", HttpStatus: http.StatusBadRequest, Description: "请求不合法"} - CODE_WRAPPER_CAPTCHA_ERROR = &CodeWrapper{Code: "CAPTCHA_ERROR", HttpStatus: http.StatusBadRequest, Description: "验证码错误"} - CODE_WRAPPER_NEED_CAPTCHA = &CodeWrapper{Code: "NEED_CAPTCHA", HttpStatus: http.StatusBadRequest, Description: "验证码必填"} - CODE_WRAPPER_USERNAME_PASSWORD_ERROR = &CodeWrapper{Code: "USERNAME_PASSWORD_ERROR", HttpStatus: http.StatusBadRequest, Description: "用户名或密码错误"} - CODE_WRAPPER_PARAMS_ERROR = &CodeWrapper{Code: "PARAMS_ERROR", HttpStatus: http.StatusBadRequest, Description: "用户名或密码错误"} - CODE_WRAPPER_LOGIN = &CodeWrapper{Code: "LOGIN", HttpStatus: http.StatusUnauthorized, Description: "未登录,禁止访问"} - CODE_WRAPPER_LOGIN_EXPIRE = &CodeWrapper{Code: "LOGIN_EXPIRE", HttpStatus: http.StatusUnauthorized, Description: "登录过期,请重新登录"} - CODE_WRAPPER_USER_DISABLED = &CodeWrapper{Code: "USER_DISABLED", HttpStatus: http.StatusForbidden, Description: "账户被禁用,禁止访问"} - CODE_WRAPPER_UNAUTHORIZED = &CodeWrapper{Code: "UNAUTHORIZED", HttpStatus: http.StatusUnauthorized, Description: "没有权限,禁止访问"} - CODE_WRAPPER_NOT_FOUND = &CodeWrapper{Code: "NOT_FOUND", HttpStatus: http.StatusNotFound, Description: "内容不存在"} - CODE_WRAPPER_RANGE_NOT_SATISFIABLE = &CodeWrapper{Code: "RANGE_NOT_SATISFIABLE", HttpStatus: http.StatusRequestedRangeNotSatisfiable, Description: "文件范围读取错误"} - CODE_WRAPPER_NOT_INSTALLED = &CodeWrapper{Code: "NOT_INSTALLED", HttpStatus: http.StatusInternalServerError, Description: "系统尚未安装"} - CODE_WRAPPER_SERVER = &CodeWrapper{Code: "SERVER", HttpStatus: http.StatusInternalServerError, Description: "服务器出错"} - CODE_WRAPPER_UNKNOWN = &CodeWrapper{Code: "UNKNOWN", HttpStatus: http.StatusInternalServerError, Description: "服务器未知错误"} + OK = &CodeWrapper{Code: "OK", HttpStatus: http.StatusOK, Description: "成功"} + BAD_REQUEST = &CodeWrapper{Code: "BAD_REQUEST", HttpStatus: http.StatusBadRequest, Description: "请求不合法"} + CAPTCHA_ERROR = &CodeWrapper{Code: "CAPTCHA_ERROR", HttpStatus: http.StatusBadRequest, Description: "验证码错误"} + NEED_CAPTCHA = &CodeWrapper{Code: "NEED_CAPTCHA", HttpStatus: http.StatusBadRequest, Description: "验证码必填"} + NEED_SHARE_CODE = &CodeWrapper{Code: "NEED_SHARE_CODE", HttpStatus: http.StatusUnauthorized, Description: "分享提取码必填"} + SHARE_CODE_ERROR = &CodeWrapper{Code: "SHARE_CODE_ERROR", HttpStatus: http.StatusUnauthorized, Description: "分享提取码错误"} + USERNAME_PASSWORD_ERROR = &CodeWrapper{Code: "USERNAME_PASSWORD_ERROR", HttpStatus: http.StatusBadRequest, Description: "用户名或密码错误"} + PARAMS_ERROR = &CodeWrapper{Code: "PARAMS_ERROR", HttpStatus: http.StatusBadRequest, Description: "用户名或密码错误"} + LOGIN = &CodeWrapper{Code: "LOGIN", HttpStatus: http.StatusUnauthorized, Description: "未登录,禁止访问"} + LOGIN_EXPIRE = &CodeWrapper{Code: "LOGIN_EXPIRE", HttpStatus: http.StatusUnauthorized, Description: "登录过期,请重新登录"} + USER_DISABLED = &CodeWrapper{Code: "USER_DISABLED", HttpStatus: http.StatusForbidden, Description: "账户被禁用,禁止访问"} + UNAUTHORIZED = &CodeWrapper{Code: "UNAUTHORIZED", HttpStatus: http.StatusUnauthorized, Description: "没有权限,禁止访问"} + NOT_FOUND = &CodeWrapper{Code: "NOT_FOUND", HttpStatus: http.StatusNotFound, Description: "内容不存在"} + RANGE_NOT_SATISFIABLE = &CodeWrapper{Code: "RANGE_NOT_SATISFIABLE", HttpStatus: http.StatusRequestedRangeNotSatisfiable, Description: "文件范围读取错误"} + NOT_INSTALLED = &CodeWrapper{Code: "NOT_INSTALLED", HttpStatus: http.StatusInternalServerError, Description: "系统尚未安装"} + SERVER = &CodeWrapper{Code: "SERVER", HttpStatus: http.StatusInternalServerError, Description: "服务器出错"} + UNKNOWN = &CodeWrapper{Code: "UNKNOWN", HttpStatus: http.StatusInternalServerError, Description: "服务器未知错误"} ) //根据 CodeWrapper来获取对应的HttpStatus func FetchHttpStatus(code string) int { - if code == CODE_WRAPPER_OK.Code { - return CODE_WRAPPER_OK.HttpStatus - } else if code == CODE_WRAPPER_BAD_REQUEST.Code { - return CODE_WRAPPER_BAD_REQUEST.HttpStatus - } else if code == CODE_WRAPPER_CAPTCHA_ERROR.Code { - return CODE_WRAPPER_CAPTCHA_ERROR.HttpStatus - } else if code == CODE_WRAPPER_NEED_CAPTCHA.Code { - return CODE_WRAPPER_NEED_CAPTCHA.HttpStatus - } else if code == CODE_WRAPPER_USERNAME_PASSWORD_ERROR.Code { - return CODE_WRAPPER_USERNAME_PASSWORD_ERROR.HttpStatus - } else if code == CODE_WRAPPER_PARAMS_ERROR.Code { - return CODE_WRAPPER_PARAMS_ERROR.HttpStatus - } else if code == CODE_WRAPPER_LOGIN.Code { - return CODE_WRAPPER_LOGIN.HttpStatus - } else if code == CODE_WRAPPER_LOGIN_EXPIRE.Code { - return CODE_WRAPPER_LOGIN_EXPIRE.HttpStatus - } else if code == CODE_WRAPPER_USER_DISABLED.Code { - return CODE_WRAPPER_USER_DISABLED.HttpStatus - } else if code == CODE_WRAPPER_UNAUTHORIZED.Code { - return CODE_WRAPPER_UNAUTHORIZED.HttpStatus - } else if code == CODE_WRAPPER_NOT_FOUND.Code { - return CODE_WRAPPER_NOT_FOUND.HttpStatus - } else if code == CODE_WRAPPER_RANGE_NOT_SATISFIABLE.Code { - return CODE_WRAPPER_RANGE_NOT_SATISFIABLE.HttpStatus - } else if code == CODE_WRAPPER_NOT_INSTALLED.Code { - return CODE_WRAPPER_NOT_INSTALLED.HttpStatus - } else if code == CODE_WRAPPER_SERVER.Code { - return CODE_WRAPPER_SERVER.HttpStatus + if code == OK.Code { + return OK.HttpStatus + } else if code == BAD_REQUEST.Code { + return BAD_REQUEST.HttpStatus + } else if code == CAPTCHA_ERROR.Code { + return CAPTCHA_ERROR.HttpStatus + } else if code == NEED_CAPTCHA.Code { + return NEED_CAPTCHA.HttpStatus + } else if code == NEED_SHARE_CODE.Code { + return NEED_SHARE_CODE.HttpStatus + } else if code == SHARE_CODE_ERROR.Code { + return SHARE_CODE_ERROR.HttpStatus + } else if code == USERNAME_PASSWORD_ERROR.Code { + return USERNAME_PASSWORD_ERROR.HttpStatus + } else if code == PARAMS_ERROR.Code { + return PARAMS_ERROR.HttpStatus + } else if code == LOGIN.Code { + return LOGIN.HttpStatus + } else if code == LOGIN_EXPIRE.Code { + return LOGIN_EXPIRE.HttpStatus + } else if code == USER_DISABLED.Code { + return USER_DISABLED.HttpStatus + } else if code == UNAUTHORIZED.Code { + return UNAUTHORIZED.HttpStatus + } else if code == NOT_FOUND.Code { + return NOT_FOUND.HttpStatus + } else if code == RANGE_NOT_SATISFIABLE.Code { + return RANGE_NOT_SATISFIABLE.HttpStatus + } else if code == NOT_INSTALLED.Code { + return NOT_INSTALLED.HttpStatus + } else if code == SERVER.Code { + return SERVER.HttpStatus } else { - return CODE_WRAPPER_UNKNOWN.HttpStatus + return UNKNOWN.HttpStatus } } @@ -85,6 +91,9 @@ func ConstWebResult(codeWrapper *CodeWrapper) *WebResult { func CustomWebResult(codeWrapper *CodeWrapper, description string) *WebResult { + if description == "" { + description = codeWrapper.Description + } wr := &WebResult{ Code: codeWrapper.Code, Msg: description, @@ -94,23 +103,23 @@ func CustomWebResult(codeWrapper *CodeWrapper, description string) *WebResult { //请求参数有问题 func BadRequest(format string, v ...interface{}) *WebResult { - return CustomWebResult(CODE_WRAPPER_BAD_REQUEST, fmt.Sprintf(format, v...)) + return CustomWebResult(BAD_REQUEST, fmt.Sprintf(format, v...)) } //没有权限 func Unauthorized(format string, v ...interface{}) *WebResult { - return CustomWebResult(CODE_WRAPPER_UNAUTHORIZED, fmt.Sprintf(format, v...)) + return CustomWebResult(UNAUTHORIZED, fmt.Sprintf(format, v...)) } //没有找到 func NotFound(format string, v ...interface{}) *WebResult { - return CustomWebResult(CODE_WRAPPER_NOT_FOUND, fmt.Sprintf(format, v...)) + return CustomWebResult(NOT_FOUND, fmt.Sprintf(format, v...)) } //服务器内部出问题 func Server(format string, v ...interface{}) *WebResult { - return CustomWebResult(CODE_WRAPPER_SERVER, fmt.Sprintf(format, v...)) + return CustomWebResult(SERVER, fmt.Sprintf(format, v...)) } //所有的数据库错误情况