GoFrame——请求校验Parse()方法返回err之坑

GoFrame请求校验Parse方法返回err之坑

学了一部分GoFrame的使用,自己尝试去写项目练习,但是有个知识点搞混了,导致程序异常。

Debug时,发现请求参数是有的,而且也能将参数转换为结构体,但是总是得不到预期结果。

首先去排查err值,但是竟然是个空字符串,就让人摸不着头绪,不知道错误在哪,以下是场景复现。

代码示例

错误代码,标签和消息中间的正确分隔符不是|,而是#。:

// LoginRequest 登录参数
type LoginRequest struct {
	UserName string `p:"username" v:"required|账号不能为空"` // 分隔符写错
	Password string `p:"password" v:"required|密码不能为空"` 
}

func (a *Admin) Login(r *ghttp.Request) {
	var (
		data  *LoginRequest
		err   error
		admin *admin.Entity
	)
	// 问题就出现在这里 err 并没有返回我们期望的错误,而是返回了一个空字符串
	if err = r.Parse(&data); err != nil {
		fmt.Printf("-----err[%s]-----\n", err.Error())
		response.FailJSON(true, r, err.Error())
	}
	// 验证登录
	admin, err = service.LoginCheck(data.UserName, data.Password)
	fmt.Println("admin", admin)
	response.SusJSON(true, r, "登录成功", admin)
}

错误分析

控制台输出:

2020-07-08 00:18:25.248 33000: http server started listening on [:8199]
-----err[]-----
2020-07-08 00:22:02.494 200 "POST http localhost:8199 /gateway/admin/login HTTP/1.1" 0.009, [::1], "", "PostmanRuntime/7.26.1"

我是使用Postman发起的请求,可以看到,它返回的是200,浏览器查看请求是正确的,但是页面得到Json响应总是有问题,错误信息msg一直是个空字符串

按照我们的预期,如果发生了错误,应该打印出堆栈信息,最起码把错误打印出来,但是框架底层并没有返回真正的错误,而是返回了一个空字符串,这就很让开发者费解,底层实现还没去研究,先记录下今天这个坑

解决办法

正确代码:

 v:"required#账号不能为空"` 
 v:"required#密码不能为空"` 

另外|分隔符用来分隔同类型内容,如标签之间或错误信息的分隔,如下:

v:"required|length:6,30#请输入密码|密码长度不够"`

排查问题这个过程花费了挺多时间的,后来去官方文档看知识点,根据实例在本地测试了,最后才发现是分隔符写错的问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值