本文已参与「新人创作礼」活动,一起开启掘金创作之路。
接上文:https://juejin.cn/post/7101353913076416519
写了这么多,可能有点乱,先看一下项目文件结构吧 static文件夹中的是web静态文件,就不过多阐述了。
路由配置
server.go ```go package logic
import ( "github.com/gin-gonic/gin" // 导入web服务框架 )
func Start(addr, webDir string) (err error) { // 使用gin框架提供的默认web服务引擎 r := gin.Default()
// 静态文件服务 if len(webDir) > 0 { // 将一个目录下的静态文件,并注册到web服务器 r.Static("/web", webDir) }
// api接口服务,定义了路由组 /faucePath faucetPath := r.Group("awesomeProject") { //定义接口,并注册到web服务器
faucetPath.POST("", gainData)
faucetPath.POST("/getAccount",getAccount)
faucetPath.POST("/HaveAccount",haveAccount)
}
// 启动web服务 err = r.Run(addr) return err }
// 封装函数,用于向客户端返回正确信息 func respOK(c *gin.Context, data interface{}) { c.JSON(200, gin.H{ "code": 0, "data": data, }) }
// 封装函数,用于向客户端返回错误消息 func respError(c *gin.Context, msg interface{}) { c.JSON(200, gin.H{ "code": 1, "message": msg, }) } ```
2、 控制器方法分离
1、控制器方法 gainData.go
``` package logic
import ( x "awesomeProject/db" "awesomeProject/solidity" "fmt" "github.com/ethereum/go-ethereum/common" "github.com/gin-gonic/gin" )
func gainData(c *gin.Context) { //结构体模板 FaucetDB:=x.FAUCET{} //获取前端form表单传来的值 Account :=c.PostForm("account") FaucetDB.Account=Account //使用链url client,err := solidity.HaveClient() if err != nil{ respError(c,err) return }
ins,_ :=solidity.HaveFaucet(client) //发送以太币 common.HexToAddress() :string转address add,err:=solidity.SendFaucetETH(client,ins,common.HexToAddress(FaucetDB.Account)) if err != nil{ respError(c,err) fmt.Println(err) return }else{ fmt.Println(add) //数据库操作 err= x.UpLimitTimes() if err != nil { respError(c,err) return } //数据库操作 err= x.UpdataETH() if err != nil { respError(c,err) return } //数据库操作 err =x.InsertFaucet(Account) if err != nil { respError(c,err) return } } //获取合约余额 blance,err:=solidity.GetBlance(client) if err != nil { respError(c,err) return }else{ fmt.Println(blance) //合约余额存入数据库,数据库操作 err=x.BlanceVal(blance) } } ```
2、控制器方法 getAccount
``` package logic
import ( "awesomeProject/db"
"github.com/gin-gonic/gin" )
func getAccount(c *gin.Context) { //将数据库中的数据赋值给x x,err:=db.ListAcc()
if err != nil { respError(c, err.Error()) return } //数据传给前端 respOK(c, x)
} ```
3、控制器方法
```go package logic
import ( "awesomeProject/db" "fmt" "github.com/gin-gonic/gin" )
func haveAccount(c *gin.Context){ //把合约相关的数据库赋值给x x,err:=db.HaveAccount() fmt.Println("sssss",x) if err != nil { respError(c, err.Error()) return } //传值给前端展示 respOK(c, x) } ```