10-11 章 注册返回200 还是注册失败

来源:10-12 编码实战: 改造api网关service

noblenooble

2020-05-01

图片描述

我看了前段代码要resp.code 返回10000才会提示注册成功 common package 里的code 是9999+ status 这里resp.code 是怎么算得?

写回答

3回答

xiaomo

2020-05-02

参考这里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) 这里出的错。

0
3
xiaomo
回复
noblenooble
这个建表语句之前我应该是改正过了(取消phone为唯一键)? 各个分支我再检查以下。
2020-05-04
共3条回复

noblenooble

提问者

2020-05-01

老师我不知道你有没有明白我的提问

//img1.sycdn.imooc.com/szimg/5eac461409c5660a24821660.jpg

这里上传是10003 

filestore-server/common/code.go 应该是这个代码返回

//img.mukewang.com/szimg/5eac4661096eb0f524100774.jpg


但我接口请求是200 为什么这里会返回10003???

按理来说200 是StatusOk 为1 请求应该是iota+9999 =10000才对

0
1
xiaomo
对于提问我是这样理解的: net/http包中的StatusOK和common包中的StatusOK不是同一个含义。http.StatusOK=200表示当前http请求正常被处理了,但具体是否注册成功得看repsonse body中的Code值。可能我还是理解错了同学你的意思?
2020-05-02
共1条回复

xiaomo

2020-05-01

同学你好,common包下的状态码属于业务级别的状态码,具体的数值是可以自己定义的,没有特别的算法。

截图里的200是http协议级别的状态码,只代表了当前的http请求正常完成了处理,与具体的业务无关。

如注册时,服务发现账号重复注册了,可以返回一个特定状态码(如1001)告诉客户端这个问题,而http响应码也是200;注册时发现密码无效,返回特定状态码(如1002), 而http响应码也是200. 当注册接口不存在时,这时http响应码就是404了。。。

http响应码与resp.Code的主要位置区别在于,http响应码在repsonse header中,resp.Code在response body中。

可以仔细查查后端注册代码哪里报了错误~~

0
0

Go实战仿百度云盘-实现企业级分布式云存储系统

紧随“云时代”技术潮流,分布式云存储系统,做第一代云程序员

1077 学习 · 494 问题

查看课程