【发布时间】:2021-12-25 03:33:26
【问题描述】:
我想抓取每条路由上的所有 http 错误,而不是每次都重写,如果 400 然后如果 404 然后如果 500 然后等等......所以我在每个路由处理程序中有一个 ErrorHandler() 函数:
func (h *Handler) List(c *gin.Context) {
movies, err := h.service.ListService()
if err != nil {
utils.ErrorHandler(c, err)
return
}
c.JSON(http.StatusOK, movies)
}
这个函数看起来像这样:
func ErrorHandler(c *gin.Context, err error) {
if err == ErrNotFound {
// 404
c.JSON(http.StatusNotFound, gin.H{"error": ErrNotFound.Error()})
} else if err == ErrInternalServerError {
// 500
c.JSON(http.StatusInternalServerError, gin.H{"error": ErrInternalServerError.Error()})
} // etc...
}
ErrNotFound 或 ErrInternalServerError 只是像这样初始化的全局变量:
var ErrNotFound = errors.New(http.StatusText(http.StatusNotFound)) // 404
我想知道我是否做得对,或者是否有更好的方法来做到这一点,比如抓住中间件中的错误并直接返回响应?
使用 node.js,我能够在中间件参数中发送 err 并像这样使用它:
app.use((err: any, req: express.Request, res: express.Response, next: express.NextFunction) => {
if (err instanceof HttpError) {
res.status(err.status).json({error: err.message});
} else if (err instanceof Error) {
res.status(500).json({error: err.message});
} else {
res.status(500).send("Internal Server Error");
}
});
有类似的吗?
【问题讨论】:
标签: go error-handling go-gin