go-zero 全局异常处理-全局中间件

1、在主入口新增

package mainimport ("flag""fmt""go/application/internal/config""go/application/internal/handler""go/application/internal/middleware""go/application/internal/svc"manage "go/pkg/manage""github.com/zeromicro/go-zero/core/conf""github.com/zeromicro/go-zero/rest""github.com/zeromicro/go-zero/rest/httpx"
)var configFile = flag.String("f", "etc/service-api.yaml", "配置文件")func main() {flag.Parse()var c config.Config// 读取配置文件中的值,将其保存在c变量上  所以这一块传递的是地址conf.MustLoad(*configFile, &c)// 将全局配置保存在全局变量上config.GlobalConfig = c// 注册服务,传递服务配置server := rest.MustNewServer(c.RestConf)// 全局中间件  这儿主要用来捕获一下全局的异常,抛出给前端server.Use(middleware.WithMiddleware)// 停止服务defer server.Stop()// 为上下文赋值  将常用的方法绑定在上下文当中(redis、orm等等)ctx := svc.NewServiceContext(c)// 注册路由handler.RegisterHandlers(server, ctx)// 统一错误处理httpx.SetErrorHandler(manage.ErrHandler)fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port)// 启动服务server.Start()
}

通过server.Use(middleware.WithMiddleware) 来注册一个全局中间件,接受一个函数

2、中间件函数体

package middlewareimport ("fmt"manage "go/pkg/manage""net/http"
)func WithMiddleware(next http.HandlerFunc) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {defer func() {if err := recover(); err != nil {fmt.Println("============这儿是全局连接处理的异常===============")fmt.Println(err)fmt.Println("============这儿是全局连接处理的异常===============")manage.SetWrite(w, r, 500, "服务器内部错误")}}()next(w, r)}
}

通过defer和recover来捕获全局异常,如果出现异常,给前端返回500、服务器内部错误,并输入错误信息

3、向前端返回错误信息函数

package manageimport ("encoding/json""net/http"
)func SetWrite(w http.ResponseWriter, r *http.Request, code int, msg string) {// 接口请求成功 200状态码w.WriteHeader(http.StatusOK)// 返回一个CodeError结构体/*type CodeError struct {Code    int    `json:"code"`Message string `json:"message"`}*/resp := CodeError{Code: code, Message: msg}// 转换成jsonjsonData, _ := json.Marshal(resp)// 设置相应格式w.Header().Set("Content-Type", "application/json")// 返回给前端结构体w.Write(jsonData)
}

搞定收工

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/649091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 枚举和注解

一、枚举类 把具体的对象一个一个例举出来的类就称为枚举类 枚举对应英文(enumeration, 简写 enum)枚举是一组常量的集合。可以这里理解:枚举属于一种特殊的类,里面只包含一组有限的特定的对象。 1.实现方式1——自定义类实现枚举 public class Enume…

Oracal学习

Oracle是什么 是甲骨文公司的一款支持事务且吞吐量高的数据库特点: (1)支持多用户、大事务量的事务处理 (2)数据安全性和完整性控制 (3)支持分布式数据处理 (4)可移植性…

【C++】C++入门基础讲解(一)

💗个人主页💗 ⭐个人专栏——C学习⭐ 💫点击关注🤩一起学习C语言💯💫 导读 经过一段时间的C语言学习,我们以及基本掌握了C语言的知识,今天,我们就开始学习C,…

2024最新幻兽帕鲁服务器多少钱一个?

幻兽帕鲁服务器多少钱?价格便宜,阿里云4核16G幻兽帕鲁专属服务器32元1个月、66元3个月,4核32G配置113元1个月、339元3个月;腾讯云4核16G14M服务器66元1个月、277元3个月、1584元一年。阿腾云atengyun.com分享阿里云和腾讯云palwor…

Libcurl的编译

什么是curl curl是常用来请求web服务器的工具,名字意思是客户端(Client)的URL工具。支持HTTP、HTTPS、rtsp等协议。 curl的作用 在我们的项目中curl主要用在两方面: 云升级,将云服务器上的软件包使用curl的API将软件…

数据结构-队列

文章目录 队列队列概述顺序队结构体顺序队基本操作初始化队列判断队空入队操作出队操作 循环队列结构体循环队列基本操作初始化队列判断队空入队操作出队操作 链队结构体链队的基本操作初始化队列判断队空入队操作出队操作 队列的应用循环队列双端都可插入删除循环链表表示队列…

SpringBoot的自动装配原理

一、SpringBootConfiguration注解的作用 SpringBootApplication注解是SpringBoot项目的核心注解,加在启动引导类上。点击进去可以发现SpringBootApplication注解是一个组合注解。其中SpringBootConfiguration和EnableAutoConfiguration是由Spring提供的,剩下的注解是由JDK提供的…

简单计算与模拟1:鸡兔同笼(POJ 3237)

1 问题描述 图1 问题描述 2 解题思路 鸡有两只脚&#xff0c;兔子有四只脚&#xff0c;且输入数据可能为奇数&#xff0c;使用公式计算即可。 3 设计代码 #include <cstdio> int main() {int nCases, nFeets;while (scanf("%d", &nCases) ! EOF){for (in…

负载均衡-Ribbon-自定义负载均衡算法

1.Ribbon 是什么 SpringCloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡的工具主要功能是提供客户端的软件负载均衡算法&#xff0c;将 Netflix 的中间服务处连接在一起Ribbon的客户端组件提供一系列完整的配置项&#xff0c;如&#xff1a;连接超时、重试等。简…

数据结构——链式栈

采用链式存储的方式来构建栈 #include<bits/stdc.h>using namespace std;#define ElementType inttypedef struct LinkNode{ElementType data;struct LinkNode *next; } *LiStack;bool InitStack(LiStack &S){S (LinkNode *)malloc(sizeof(LinkNode));if(S NULL){…

R语言【taxa】——as_taxon():转换为 taxon 对象

Package taxa version 0.4.2 Description 将其他对象转换为 taxon 向量。taxon 构造器可能将 基础向量转换为 taxon 向量。 Usage as_taxon(x, ...) Arguments 参数【x】&#xff1a;要转换为 taxon 向量的对象。 参数【...】&#xff1a;其余参数。 Examples x <- taxo…

计算机视觉技术综述

目录 一、技术背景 1、什么是计算机视觉技术 2、该技术兴起的背景 二、国内外计算机视觉技术现状 1、计算机视觉技术分类、发展历程及其可能导致社会问题&#xff0c;研究中存在问题&#xff0c;如何改进。 计算机视觉技术分类&#xff1a; 计算机视觉主要发展历程&#xff1a;…

echarts 绘制垂直滚动热力图

问题1&#xff1a;提示功能无效 问题2&#xff1a;值筛选无效 效果 在线浏览 下载echarts官网例子(heatmap Examples - Apache ECharts) 稍作改动&#xff1a; generateData 入参改为长度和宽度noise.perlin2(i / 40, j / 20) Math.random() * 5y轴倒置指定zlevel为2 通过定…

SpringMVC-文件上传与下载

文章目录 文件上传与下载1.下载2.上传 文件上传与下载 1.下载 RequestMapping("/testDown")public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {//获取servletcontext对象ServletContext servletcontextsession.get…

蓝桥杯备战——7.DS18B20温度传感器

1.分析原理图 通过上图我们可以看到DS18B20通过单总线接到了单片机的P14上。 2.查阅DS18B20使用手册 比赛的时候是会提供DS18B20单总线通讯协议的代码&#xff0c;但是没有提供读取温度数据的代码&#xff0c;所以还是需要我们去查看手册&#xff0c;我只把重要部分截下来了 …

将Android APP安装到sm8550 HDK的NVMe SSD

APP存储路径 在Android中&#xff0c;App在运行过程中主要访问的数据路径通常包括以下几个方面&#xff1a; 内部存储&#xff08;Internal Storage&#xff09;&#xff1a;App会访问其私有的内部存储空间&#xff0c;这个空间通常位于&#xff1a; /data/data/<package…

python-自动篇-运维-根据计算机硬盘、主板、CPU生成注册信息

文章目录 准备代码效果 准备 本实例需要使用WMI模块&#xff0c;所以需要安装WMI模块。在安装WMI模块之前&#xff0c;先要安装pywin32模块&#xff0c;WMI模块需要win32api的支持。使用pip安装pywin32模块和WMI模块的代码如下&#xff1a; pip install win32com pip install …

Ubuntu 22.04 安装tomcat

tomcat是常用的Java服务容器,这篇文章我们就来讲讲如何安装它。 更新软件包 首先是更新软件包,这是最常规的操作 sudo apt update 然后是开始安装,不多一会就可以安装好了 sudo apt install tomcat9 然后看一下状态 sudo systemctl status tomcat9 发现虽然启动了,但…

openssl3.2/test/certs - 053 - Name constraints subordinate CA. Adds

文章目录 openssl3.2/test/certs - 053 - Name constraints subordinate CA. Adds概述笔记END openssl3.2/test/certs - 053 - Name constraints subordinate CA. Adds 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 /*! * \file D:\my_dev\my_local_git_prj\study\…

Python第十一章(推导式)

一。列表推导式&#xff1a;目的化简代码&#xff0c;可以改变数据 例句1&#xff1a;如果while循环继续创建序列累加 例句2&#xff1a;如果for循环进行列表累加 1.循环列表推导式进行累加&#xff1a; 注释&#xff1a;第一个i表示的是返回的数据于列表&#xff0c;for后面内…