采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
http://localhost:8082/static/view/signup.html
我看了前段代码要resp.code 返回10000才会提示注册成功 common package 里的code 是9999+ status 这里resp.code 是怎么算得?
参考这里https://git.imooc.com/coding-323/filestore-server/src/master/service/account/handler/user.go:
// Signup : 处理用户注册请求 func (u *User) Signup(ctx context.Context, req *proto.ReqSignup, res *proto.RespSignup) error { username := req.Username passwd := req.Password // 参数简单校验 if len(username) < 3 || len(passwd) < 5 { res.Code = common.StatusParamInvalid res.Message = "注册参数无效" return nil } // 对密码进行加盐及取Sha1值加密 encPasswd := util.Sha1([]byte(passwd + cfg.PasswordSalt)) // 将用户信息注册到用户表中 dbResp, err := dbcli.UserSignup(username, encPasswd) if err == nil && dbResp.Suc { res.Code = common.StatusOK res.Message = "注册成功" } else { res.Code = common.StatusRegisterFailed res.Message = "注册失败" } return nil }
应该是 dbResp, err := dbcli.UserSignup(username, encPasswd) 这里出的错。
问题找到了 因为我之前已经创建过一个用户而那个用户的 "phone" 那个column没有被定义。 但是在git repository 里面的建表语句里 "phone" 这个column 被定义成唯一建——UNIQUE KEY, 而跟着视频走的时候因为并没有包含"phone" 这个column的初始化。 以至于第一次创建账号时被定义了空 ("") 值 第二次signup的时候因为被唯一约束导致无法正确插入表 并且在插入语句时用了 insert ignore 所以后端并没有返回报错 而是忽略掉了错误。 我相信跟着视频走的不止我一个会发生这个错误, 毕竟数据库是比较前面章节讲到的内容如果分期来看视频的话很容易忽略掉 因为之前测试都是通过的。
多谢同学提醒,这部分我优化一下,同时加个标注。
这个建表语句之前我应该是改正过了(取消phone为唯一键)? 各个分支我再检查以下。
老师我不知道你有没有明白我的提问
这里上传是10003
filestore-server/common/code.go 应该是这个代码返回
但我接口请求是200 为什么这里会返回10003???
按理来说200 是StatusOk 为1 请求应该是iota+9999 =10000才对
对于提问我是这样理解的: net/http包中的StatusOK和common包中的StatusOK不是同一个含义。http.StatusOK=200表示当前http请求正常被处理了,但具体是否注册成功得看repsonse body中的Code值。可能我还是理解错了同学你的意思?
同学你好,common包下的状态码属于业务级别的状态码,具体的数值是可以自己定义的,没有特别的算法。
截图里的200是http协议级别的状态码,只代表了当前的http请求正常完成了处理,与具体的业务无关。
如注册时,服务发现账号重复注册了,可以返回一个特定状态码(如1001)告诉客户端这个问题,而http响应码也是200;注册时发现密码无效,返回特定状态码(如1002), 而http响应码也是200. 当注册接口不存在时,这时http响应码就是404了。。。
http响应码与resp.Code的主要位置区别在于,http响应码在repsonse header中,resp.Code在response body中。
可以仔细查查后端注册代码哪里报了错误~~
登录后可查看更多问答,登录/注册
紧随“云时代”技术潮流,分布式云存储系统,做第一代云程序员
1.1k 23
1.8k 13
1.4k 13
967 13
910 13