Go项目实战1(用户登录和注册)

    

项目实战:


js代码1(注册)

axios.post('http://localhost:8093/',{username:this.create_usename,

        password:this.create_password}).then(

    response =>{

        console.log(response.data)

    })

    .catch(error =>{

        console.log(error);

    })

       

   }


js代码2 (登录)

 axios.post("http://127.0.0.1:8093/sign",{username:this.username,password:this.password}).then(

      response =>{

        console.log(response.data)

      },

      error =>{

        console.log(error)

      }


Go代码

package main

import (

    "github.com/gin-gonic/gin"

    "net/http"

    "time"

    "fmt"

    _ "github.com/go-sql-driver/mysql"

    "database/sql"

    "github.com/gin-contrib/cors"

)

type User struct{

    Username string `form:"username"`

    Password string `form:"password"`

}

 //定义中间

 func MiddleWare() gin.HandlerFunc {

    return func(c *gin.Context) {

t := time.Now()

fmt.Println("中间件开始执行了")

//  status :=c.Writer.Status()

 t2 :=time.Since(t)

 fmt.Println("time",t2)

    }

 }

 //这也是handlerfunc类型

func regist(c *gin.Context){

   

   

    fmt.Println("进入了regist")

    //通过数据绑定来实现,初始化结构体

    var u User

    err :=c.Bind(&u)//需要传指针

    if err != nil {

        c.JSON(http.StatusBadRequest,gin.H{

            "error":err.Error(),

        })

    }else{

        c.JSON(http.StatusOK,gin.H{

            "status":"ok",

            "usernames":u.Username,

            "password":u.Password,

        })

    }

//传值

    c.Set("username",u.Username)

    c.Set("password",u.Password)

    //注册完之后回到中间件

//验证是否存在该账号

    isExist := verify(u.Username)

    if isExist {

        c.JSON(http.StatusBadRequest,gin.H{

            "status":"创建失败,该用户已存在",

        })

        return

    }

   

    sql := "INSERT INTO  users (username,password) VALUES(?,?)";

        ret,err := db.Exec(sql,u.Username,u.Password)

        if err!=nil{

            fmt.Println("添加失败")

        }else{

            rowsAffected,err :=ret.RowsAffected()

            if err !=nil{

                fmt.Println("获取受影响的行数失败:",err)

            }else{

                fmt.Println("添加成功,受影响的行数",rowsAffected)

            }

        }

}

//验证账户是否有重复

func verify(username string)bool{

var username1 string

sql :="select username from users where username=?"

err := db.QueryRow(sql,username).Scan(&username1)

if err != nil{

    fmt.Println("查询失败",err)

    return false

}

if username1 !=""{

    return true

}else{

    return false

}

}

func signin(c *gin.Context){

    sql :="select username,password from users where username=? and password=?"//单语句查询

   

var u1 User

err :=c.Bind(&u1)

if err != nil{

    c.JSON(http.StatusBadRequest,gin.H{

        "status":"绑定失败",

    })

   

    return

}}

var u2 User

    err =db.QueryRow(sql,u1.Username,u1.Password).Scan(&u2.Username,&u2.Password)

fmt.Println("这是u1",u1)

fmt.Println("这是u2",u2)

var u3 =[]string{u1.Username,u1.Password}

    if u2.Username==""||u2.Password==""{//通过前端传过来的参数我们对数据库进行了查询,并通过指针传递给了u2

        fmt.Println("登录失败",err)

        c.JSON(http.StatusBadRequest,gin.H{

           

            "status":"用户名或密码输入错误",

        })

        return

    }else{

        fmt.Println("登录成功")

        c.JSON(http.StatusOK,gin.H{//状态码为"200"

           

            "status":"登录成功,

            "message":u3,

            //返回码消息

            //

        })

    }

}

var db *sql.DB

func authMiddleware(c *gin.Context) {

//跨域设置

    //这里连接数据库

    dsn :="root:551765@tcp(localhost:3306)/xk"

var err error

    db,err =sql.Open("mysql",dsn)

    if err != nil {

        fmt.Println(err)

    }else{

        fmt.Printf("连接成功")

    }

    defer db.Close()

    c.Next()

    name1,ok :=c.Get("username")

    if ok{

        fmt.Println(name1)

    }else{

        fmt.Println("获取失败")

    }

    name2,_:=c.Get("password")

fmt.Println("这是name2",name2)

   

   

}

func main() {

 r :=gin.Default()

    r.Use(cors.New(cors.Config{ //定义了一个全局中间件,来解决前端访问8093端口号带来的跨域问题

        AllowOrigins:     []string{"http://localhost:8080"},

        AllowMethods:     []string{"PUT", "PATCH","POST","GET"},

        AllowHeaders:     []string{"Origin", "Content-Type"},

        ExposeHeaders:    []string{"Content-Length"},

        AllowCredentials: true,

        AllowOriginFunc: func(origin string) bool {

          return origin == "http://localhost:8080"

        },

        MaxAge: 12 * time.Hour,

      }))

   

    r.POST("/",authMiddleware,regist)

    r.POST("/sign",authMiddleware,signin)//先经过中间件执行连接数据库等操作

 

    r.Run(":8093")

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值