当前位置: 首页 > news >正文

做APP好还是建设网站好东莞做网站哪个公司好

做APP好还是建设网站好,东莞做网站哪个公司好,太原建站一条龙,做响应式网站应该注意什么文章目录 一 、增加路由二、书写流程控制#xff08;controller#xff09;逻辑三、书写业务逻辑四、与DB交互五、测试 代码地址#xff1a;https://gitee.com/lymgoforIT/bluebell 一 、增加路由 添加路由#xff0c;使用分组管理 v1 : r.Group(/api/v1)//… 文章目录 一 、增加路由二、书写流程控制controller逻辑三、书写业务逻辑四、与DB交互五、测试 代码地址https://gitee.com/lymgoforIT/bluebell 一 、增加路由 添加路由使用分组管理 v1 : r.Group(/api/v1)// 注册 v1.POST(/signup, controller.SignUpHandler)由于我们的项目是非常简单的上入门项目所以并不会用到DDD等复杂的目录设计和管理而是用了最基本的MVC三层结构。 controller目录用于接收路由进行基本的参数校验不做业务逻辑处理。logic目录用于处理业务逻辑。dao目录用于用数据源交互。 绿色即为本次注册功能需要新增的代码文件 二、书写流程控制controller逻辑 controller/user.go user.go文件主要负责用户的注册和登录。 这里首先写注册逻辑后续的登录逻辑也会在这个文件中实现。 package controllerimport (bluebell/modelsgithub.com/gin-gonic/gingithub.com/go-playground/validator/v10go.uber.org/zap )// SignUpHandler 处理注册请求的函数 func SignUpHandler(c *gin.Context) {// 1. 获取参数和参数校验p : new(models.ParamSignUp)if err : c.ShouldBindJSON(p); err ! nil {// 请求参数有误直接返回响应zap.L().Error(SignUp with invalid param, zap.Error(err))// 判断err是不是validator.ValidationErrors 类型errs, ok : err.(validator.ValidationErrors)if !ok {ResponseError(c, CodeInvalidParam)return}ResponseErrorWithMsg(c, CodeInvalidParam, removeTopStruct(errs.Translate(trans)))return}// 2. 业务处理if err : logic.SignUp(p); err ! nil {zap.L().Error(logic.SignUp failed, zap.Error(err))if errors.Is(err, mysql.ErrorUserExist) {ResponseError(c, CodeUserExist)return}ResponseError(c, CodeServerBusy)return}// 3. 返回响应ResponseSuccess(c, nil) } 代码说明 controller层不做业务逻辑主要就是组织整体流程的如参数校验业务处理返回响应。返回结果比较通用所以封装工具函数更为简介、易读。适当的定义一些错误码是不错的选择。 定义状态码并封装响应方法 controller/code.go package controllertype ResCode int64const (CodeSuccess ResCode 1000 iotaCodeInvalidParamCodeUserExistCodeUserNotExistCodeInvalidPasswordCodeServerBusyCodeNeedLoginCodeInvalidToken )var codeMsgMap map[ResCode]string{CodeSuccess: success,CodeInvalidParam: 请求参数错误,CodeUserExist: 用户名已存在,CodeUserNotExist: 用户名不存在,CodeInvalidPassword: 用户名或密码错误,CodeServerBusy: 服务繁忙,CodeNeedLogin: 需要登录,CodeInvalidToken: 无效的token, }func (c ResCode) Msg() string {msg, ok : codeMsgMap[c]if !ok {msg codeMsgMap[CodeServerBusy]}return msg } controller/response.go package controllerimport (net/httpgithub.com/gin-gonic/gin )/* {code: 10000, // 程序中的错误码msg: xx, // 提示信息data: {}, // 数据 }*/type ResponseData struct {Code ResCode json:codeMsg interface{} json:msgData interface{} json:data,omitempty }func ResponseError(c *gin.Context, code ResCode) {c.JSON(http.StatusOK, ResponseData{Code: code,Msg: code.Msg(),Data: nil,}) }func ResponseErrorWithMsg(c *gin.Context, code ResCode, msg interface{}) {c.JSON(http.StatusOK, ResponseData{Code: code,Msg: msg,Data: nil,}) }func ResponseSuccess(c *gin.Context, data interface{}) {c.JSON(http.StatusOK, ResponseData{Code: CodeSuccess,Msg: CodeSuccess.Msg(),Data: data,}) }三、书写业务逻辑 首先我们需要查询DB中要注册的用户名是否已经存在所以需要先提供一个可以和DB交互的modeluser models/user.go 提示可以直接SQL转对应的结构体 package modelsimport timetype User struct {ID int64 gorm:column:id db:id json:id form:idUserId int64 gorm:column:user_id db:user_id json:user_id form:user_idUsername string gorm:column:username db:username json:username form:usernamePassword string gorm:column:password db:password json:password form:passwordEmail string gorm:column:email db:email json:email form:emailGender int64 gorm:column:gender db:gender json:gender form:genderCreateTime time.Time gorm:column:create_time db:create_time json:create_time form:create_timeUpdateTime time.Time gorm:column:update_time db:update_time json:update_time form:update_time }func (User) TableName() string {return user } logic/user.go 负责校验用户名是否已经存在若不存在则生成唯一的用户ID注册用户 import (bluebell/modelsbluebell/pkg/snowflake )func SignUp(p *models.ParamSignUp) (err error) {// 1.判断用户存不存在if err : mysql.CheckUserExist(p.Username); err ! nil {return err}// 2.生成UIDuserID : snowflake.GenID()// 构造一个User实例user : models.User{UserID: userID,Username: p.Username,Password: p.Password,}// 3.保存进数据库return mysql.InsertUser(user) }四、与DB交互 定义与DB交互时可能出现的相关错误码 dao/mysql/error_code.go package mysqlimport errorsvar (ErrorUserExist errors.New(用户已存在)ErrorUserNotExist errors.New(用户不存在)ErrorInvalidPassword errors.New(用户名或密码错误)ErrorInvalidID errors.New(无效的ID) )校验用户名是否已经存在、对密码加密、保存新注册的用户 dao/mysql/user.go package mysqlimport (bluebell/modelscrypto/md5encoding/hex )// 把每一步数据库操作封装成函数 // 待logic层根据业务需求调用const secret lym.com// CheckUserExist 检查指定用户名的用户是否存在 func CheckUserExist(username string) (err error) {var count int64if err : db.Model(models.User{}).Where(username ?, username).Count(count).Error; err ! nil {return err}if count 0 {return ErrorUserExist}return }// InsertUser 想数据库中插入一条新的用户记录 func InsertUser(user *models.User) (err error) {// 对密码进行加密user.Password encryptPassword(user.Password)// 执行SQL语句入库u : models.User{UserId: user.UserId,Username: user.Username,Password: user.Password,}err db.Create(u).Errorreturn }// encryptPassword 密码加密 func encryptPassword(oPassword string) string {h : md5.New()h.Write([]byte(secret))return hex.EncodeToString(h.Sum([]byte(oPassword))) } 五、测试 编译 go build运行 ./bluebell.exe ./config/config.yaml注册因为lym已经存在所以会返回用户名已存在 注册一个不存在的名字试试成功 查询DB注册成功且密码是经过MD5加密过的实际就是123
http://www.pierceye.com/news/825584/

相关文章:

  • 江苏网站建设效果好技术支持 英铭网站建设
  • 很多网站开发没有框架如何制作的网站模板制作与安装教程视频教程
  • 小说网站建设目的360如何做网站
  • 永安市住房与城乡建设局网站腾讯邮箱企业邮箱入口登录
  • 手机和wap网站建设wordpress链接 数据库
  • 1688网站简介青岛网站建设系统
  • 优秀网站的特点wordpress 腾讯云oss
  • 深圳专业做网站公司怎么做网站跳转
  • 设计教学网站推荐重庆大渝网
  • 网站建设询价邀请函二级建造师报名的官网
  • 沈阳个人网站建设表白网站制作软件
  • 开封+网站建设+网络推广网站建设及托管合同模板
  • 怎么看公司网站建设的时间苏州展厅设计公司排名
  • 新电商平台电脑优化软件哪个好用
  • 个人可以建网站咨询公司简介
  • 关于网站开发怎么找到做外贸的国内公司
  • 国外优秀摄影作品网站互联网项目推广方案
  • icp网站备案查询美容整形网站建设
  • 广州网站建设八爪鱼湖南网络公司排名
  • 网站公司名称大全龙元建设集团有限公司网站
  • 网站开发技术可行性分析邢台建设企业网站
  • 有一个网站 人物模型可以做各种动作沈阳军成网站建设
  • h5移动网站开发南京企业自助建站系统
  • 开发一个企业网站报价wordpress副标题字数
  • 芜湖哪家公司做网站不错江宁网站建设方案
  • 做网站公司赚钱吗?百度搜索下载
  • 手机购物网站模版企业信息系统查询系统官网江苏
  • 礼品行业网站建设北京网站设计精选刻
  • 六安论坛网站WordPress ftp 媒体库子目录
  • 网站域名com和cn应用商店免费下载