错误定义
定义错误码和输出,在utils下,新建一个文件夹errmsg,注意,文件夹!在文件夹下再新建errmsg.go
,为什么要这样做呢,因为在同一个文件夹下,只能允许存在一个package,我们在utils下,只能使用utils,所以,新建一个errmsg,我们就可以使用errmsg这个包名。
package errmsg
// 定义一些常量,用来指定错误码。
const (
SUCCSE = 200
ERROR = 500
// code=1XXX,用户模块错误
ERROR_USERNAME_USED = 1001
ERROR_PASSWORD_WRONG = 1002
ERROR_USER_NOT_EXIST = 1003
ERROR_TOKEN_EXIST = 1004
ERROR_TOKEN_RUNTIME = 1005
ERROR_TOKEN_WRONG = 1006
ERROR_TOKEN_TYPE_WRONG = 1007
// code=2XXX,文章模块错误
// code=3XXX,分类模块错误
)
// 定义一个map,用来接收状态码来输入错误信息
var CodeMsg = map[int]string{
SUCCSE: "OK",
ERROR: "FAIL",
ERROR_USERNAME_USED: "用户名已存在!",
ERROR_PASSWORD_WRONG: "密码错误",
ERROR_USER_NOT_EXIST: "用户不存在",
ERROR_TOKEN_EXIST: "TOKEN不存在,请重新登陆",
ERROR_TOKEN_RUNTIME: "TOKEN已过期,请重新登陆",
ERROR_TOKEN_WRONG: "TOKEN不正确,请重新登陆",
ERROR_TOKEN_TYPE_WRONG: "TOKEN格式错误,请重新登陆",
}
// 定义一个方法,来接收状态吗输出错误信息
func GetErrorMsg(code int)string {
return CodeMsg[code]
}
用户create/get
写业务逻辑接口,每个人都有每个人的习惯,这里我按照我的习惯写一下,这部分如果熟悉gorm的使用或者有其他想法的道友就可以跳过啦。
不过注意,此时的用户添加注册不是最终形态,因为最起码的密码还没有加密,所以后期还需要慢慢的来补。暂时先如此。
- 首先在
model/User.go
下,新添加几个操作数据库函数,这里只针对于数据库的GORM操作,并不关API的事。
// 存在性判断
func CheckUser(name string)(code int) {
var users User
// 查询用户是否存在
db.Where("username=?",name).First(users)
if users.ID > 0 {
// 如果存在则引出错误
return errmsg.ERROR_USERNAME_USED
}
// 不存在则输入正确
return errmsg.SUCCSE
}
// 添加用户
func CreateUser(data *User)int {
// 添加时接收一下错误
err := db.Create(&data).Error
if err!=nil {
return errmsg.ERROR
}
return errmsg.SUCCSE
}
// 用户列表
func GetUsers(PageSize int, PageNum int)[]User {
var users []User
// 分页
err = db.Limit(PageSize).Offset((PageNum - 1) * PageSize).Find(&users).Error
if err != nil && err != gorm.ErrRecordNotFound {
return nil
}
// 返回用户的列表
return users
}
- 在
api/v1/user.go
下,添加API代码:
var code int
// 添加用户
func AddUser(c *gin.Context) {
// 接收用户数据,放在data里
var data model.User
_ = c.ShouldBindJSON(&data)
// 查看是否存在,不存在则添加
code = model.CheckUser(data.Username)
if code == errmsg.SUCCSE {
model.CreateUser(&data)
}
// 如果存在,则返回错误码
if code == errmsg.ERROR_USERNAME_USED {
code = errmsg.ERROR_USERNAME_USED
}
c.JSON(http.StatusOK,gin.H{
"code":code,
"msg":errmsg.GetErrorMsg(code),
"data":data,
})
}
// 查询多个用户
func GetUsers(c *gin.Context) {
// 字符串转int,如果不传,默认值按照需求设置
PageSize,_ := strconv.Atoi(c.DefaultQuery("pagesize","3"))
PageNum,_ := strconv.Atoi(c.DefaultQuery("pagenum","1"))
data := model.GetUsers(PageSize,PageNum)
code = errmsg.SUCCSE
c.JSON(http.StatusOK,gin.H{
"code":code,
"msg":errmsg.GetErrorMsg(code),
"data":data,
})
}
有个小问题,如果用户存在,且状态码返回了,但是返回的同时有他输入的数据,还有User这个结构体的数据结构,很不安全,掌握了接口之后,有心之人很可能会通过篡改数据等方法威胁到数据库安全。暂时先这样,还得研究一下。
- Post link: https://www.godhearing.cn/gin-vue-da-jian-ge-ren-bo-ke-2/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.