文章目录

  • 创建基本路由
  • 接收和验证数据

该项目为练手项目,只实现了简单聊天室功能,主要目的为了熟悉golang的协程,go中使用mysql和redis,同时学习vue3和element-plus,项目全程在win下运行。

创建基本路由

我们首先在go的工作目录下下创建一个项目目录,project1。在项目目录中我们建立一个routers目录,用于存放路由相关文件。创建一个route.go文件,如下

import ("github.com/gin-gonic/gin"//引入gin框架包,所有非官方包,都需要先安装
)
//创建一个设置header的中间件,设置跨域等请求
func cors() gin.HandlerFunc{return func(c *gin.Context){method := c.Request.Methodorigin := c.Request.Header.Get("Origin")if origin != ""{c.Header("Access-Control-Allow-Origin", "http://127.0.0.1:9090")c.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token")c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE")c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type")c.Header("Access-Control-Allow-Credentials", "true")}//放行所有OPTIONS方法if method == "OPTIONS" {c.AbortWithStatus(http.StatusNoContent)}// 处理请求c.Next()}
}func NewRouter() *gin.Engine{//实例化一个gin的路由对象r := gin.Default()//使用全局中间件r.Use(cors())//设置路由地址,和执行路由的方法//第一个参数为域名后请求的地址//第二个参数是一个匿名方法或已定义方法名,方法必须传入*gin.Contex类型的参数r.POST("/user/register", func(c *gin.Contex){fmt.Println("这是注册")})r.POST("/user/login", func(c *gin.Contex){fmt.Println("这是登录")})r.GET("/index", func(c *gin.Contex){fmt.Println("这是首页")})return r
}

在项目根目录下创建项目启动文件main.go,如下

package mainimport ("project1/routes"
)func main(){r := routes.NewRouter()r.Run(":8080")
}

在项目根目录下,执行命令行:go run main.go 运行程序
postman中,请求注册方法,地址为:127.0.0.1:8080/user/register
我们看到命令行中打印出了 相关内容,但是postman没有任何内容输出,方法还需要改造,让方法返回数据给response

r.POST("/user/register", func(c *gin.Contex){fmt.Println("这是注册")//第一参数设置http返回的header头的状态,第二个参数可以是任何类型的值c.JOSN(200,gin.H{"code":1,"msg":"请求成功"})
})

再次请求后,postman中返回了我们设置的内容
接下来我们可以在方法内,进行接收数据,注册等操作。但是方法内容比较多时,路由文件比较大,不方便查看。我们可以把方法统一提取到一个文件内,这里只调用方法名即可

接收和验证数据

在项目根目录下,创建api目录。api目录下创建user.go文件,该文件内可以存放用户操作相关的方法,如下

package apiimport ("fmt""github.com/gin-gonic/gin""github.com/gin-gonic/gin/binding""github.com/go-playground/validator/v10"
)
//注册的话需要接收传入参数
//gin框架提供了ShouldBind方法,验证并接收传入的参数。但首先要定义好接收参数的结构体,如下
type RegisterRule struct{//tag设置对输入字段的验证规则//form 表示来接收表单参数,uri接收url参数,json接收json参数,后边是传入的参数名//uniquePhone 为自定义验证规则Phone string `form:"phone" binding:"required,uniquePhone,min=11,max=11"`Password string `form:"password" binding:"required,min=6"`Name string `form:"nickname" uri:"nickname" json:"nickname" binding:"required"`
}//在验证规则定义了一个自定义方法,此处创建该方法,方法名不需要和tag中的名称一致,在注册时会重新命名
//方法必须传入指定类型参数 validator.FieldLevel
func CheckUniquePhone(f validator.FieldLevel) bool{// validator是gin框架的默认验证器,可以根据结构体的tag验证字段属性,和获取字段的值// 此处获取结构体中传入的字段的值if phone,ok := f.Field().Interface().(string);ok {var isExist int64var userModel Usermysql := GetMysql()defer mysql.Close()mysql.Where("phone = ?",phone).First(&userModel).Count(&isExist)if isExist >= 1{return false}}else{return false}return true
}//注册方法
func Register(c *gin.Context){//把自定义的校验方法注册到 validator中,ShouldBind执行时会自动调用if v, ok := binding.Validator.Engine().(*validator.Validate); ok {// uniquePhone为注册的名称,需要和RegisterRule的tag指定的名称一样v.RegisterValidation("uniquePhone", CheckUniquePhone)}//声明一个接收传入参数的结构体变量var registerRule RegisterRule//执行验证接收if err := c.ShouldBind(&registerRule);err == nil {c.JSON(200,registerRule)}else{c.JSON(402,err.Error())}
}

执行后,访问127.0.0.1:8080/user/register,传入RegisterRule 中指定参数,查看设置的规则是否生效

创建好方法后,在route.go文件中可以进行引用,如下

import ("github.com/gin-gonic/gin""project1/api"
)
func NewRouter() *gin.Engine{r := gin.Default()r.POST("/user/register", api.register)return r
}

go+mysql+redis+vue3简单聊室,第1弹:接口路由搭建和传参相关推荐

  1. vue3路由配置及路由跳转传参

    1.安装路由 npm i vue-router 2.编写需要展示的路由 在src目录下创建pages文件夹,里面创建两个vue文件命名为student.vue,person.vue 分别编写两个vue ...

  2. Docker 安装 Mysql , Redis,ElasticSearch,Kibana,RabbitMQ,Zipkin,Nacos,Minio Docker服务器环境搭建

  3. php360随机壁纸图片接口,PHP超简单的随机图片头像API接口网站搭建教程

    摘要 向上文所说,为了其他邮箱调用随机图片,我当时特意去网上找了些随机图片API接口网站,发现他们API接口有点慢,本着不外链的精神,自己搭建了个随机图片and头像的API接口.在这里把教程分享给大家 ...

  4. ionic简单路由及页面传参

    1)页面跳转及传参方法 angular.module('app.routes', [])//routes路由模型 .config(function($stateProvider, $urlRouter ...

  5. 面试 - 要不简单聊一下你对MySQL索引的理解?

    转载自  面试 - 要不简单聊一下你对MySQL索引的理解? MySQL索引?这玩意儿还能简单聊?明显是在挖坑,幸好老夫早有准备,切听我一一道来. 一.索引是什么? 索引是帮助MySQL高效获取数据的 ...

  6. docker flask mysql_Docker下Python Flask+Redis+MySQL+RQ队列简单配置

    本篇博文主要讲解Docker下使用RQ队列的通信配置,主要是网上的部分文章写的不太清楚,特写一篇 作者使用docker-compose.yml文件调度各部分文件Dockerfile,起初是这样写的 v ...

  7. swoole 项目实战——实现简单聊天室

    前言:了解了概念之后就应该练练手啦,不然就是语言的巨人,行动的矮子啦 代码仓库 实战 swoole[聊天室] 在线体验 准备工作 需要先看初识 swoole[上],了解基本的服务端 WebSocket ...

  8. Nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分...

    Nginx反向代理.动静分离.负载均衡及rewrite隐藏路径详解 (Nginx Apache MySQL Redis) 楓城浪子原创,转载请标明出处! 更多技术博文请见个人博客:https://fe ...

  9. mysql redis教程_MySQL redis学习与应用

    诸如mysql等关系型数据库,在数据存储在高并发情况下读写性能有所限制,Nosql(非关系型数据库)便应运而生,弥补了关系型数据库的不足. [简介] redis是作为一种key-value存储形式的N ...

最新文章

  1. 第二课unit11 系统恢复技术
  2. 初学c++基础知识——第一个c++程序
  3. 【学习方法】学习心法总结之——如何平稳得开启数据之路
  4. 标准C程序设计七---53
  5. jvm调优:能生成的线程数
  6. Java面试面向对象三大特征,Java面试经典基础问答三
  7. VUE:解决判断网页端与手机端情况下,横竖屏无法判断的问题
  8. 未发现数据源名称并且未指定默认驱动程序_看我如何发现NVIDIA GeForce Experience代码执行漏洞...
  9. 用MATLAB玩转机器人--第五章 机器人的数学建模
  10. LeetCode7.反转整数
  11. 华为企业互动社区云计算板块
  12. Python 杠上 Java、C/C++,赢面有几成?
  13. 冲刺CCNA2.0(200-120)认证考试TK视频讲解
  14. 2022-09-13 mysql列存储引擎-POC-查询数据错误追踪
  15. jquery禁止鼠标右键 原生js禁止鼠标右键
  16. Visual Basic
  17. 堪称货拉拉混合云数据库建设史,一场DBA团队的逆袭之战
  18. 05-----关于C++使用VS时出现 error C2248: “xxx“ 无法访问private成员(在“MySpdlog“类中声明)
  19. JAVA视频资料百度网盘分享
  20. (一)软件开发背景 - 天津市政府采购中心网

热门文章

  1. 《Hadoop 权威指南 - 大数据的存储与分析》学习笔记
  2. django vue 前后端联调 小米商城B2C模式登录注册
  3. 淘淘商城之商品添加功能实现
  4. PCIe——LTSSM
  5. 好看的idea主题颜色下载
  6. Sanic框架下部署Pytorch模型
  7. 全国各省土壤类型空间分布数据
  8. 【Qt学习】 设计视频播放器界面
  9. 4.CSS层叠样式表一
  10. android坦克大战源代码,android的坦克大战 - 源码下载|源代码 - 源码中国