区块链web应用编写实现控制器

区块链控制器的编写

在上一篇文章中我们实现了编写区块链web应用编写的路由,直通车 那么这次我们就来说下区块链web应用控制器的编写,在编写控制器之前我们需要检查一下需要用到的golang的依赖包是否存在,否则的话就不能编写控制器,依赖包如下:golang依赖包 在确保依赖包都存在时我们便可以编写了控制器代码。
控制器便是一些方法代码块来实现功能。导包便不需要我们自己写,(除了一些特定的)goalnd会帮我们自动导包,我们可以将一个结构体作为一个控制器文件,在其中编写方法实现对账本的操作,我们还是直接来看代码。

package controller//这个包名是项目结构的文件夹

import (
	"agricultural/application/lib"//这个是整个项目的结构体文件
	"bytes"
	"encoding/json"
	bc "agricultural/application/blockchain"//这个便是整个项目文件的sdk了sdk编写可参照之前文章
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

// 这里是公司录入一个资产
func CreateAssets(ctx *gin.Context)  {
	companyId := ctx.Query("companyId")
	// 解析结构体
	req := new(lib.Assets)//解析lib里面的Assets结构体
	if err := ctx.ShouldBind(req); err != nil {
		_ = ctx.AbortWithError(http.StatusBadRequest, err)
		return
	}
	marshal, _ := json.Marshal(req)//序列化req
	resp, err := bc.ChannelExecute("createAssets", [][]byte{
	//这边是ChannelExecute不知道大家还有没有印象,在sdk编写中写的一个方法,,当有保存删除修改的操作时都是使用此方法,不能使用ChannelQuery不然会报错。
		marshal,
		[]byte(companyId),
	})
	if err != nil {//抛出异常
		fmt.Println("ERROR: ", err.Error())
		ctx.String(http.StatusInternalServerError, err.Error())
		return
	}
	ctx.JSON(http.StatusOK, resp)
}
// 查询公司  这个同上面一样唯一不一样的便是 ChannelQuery 查询操作都是使用此方法
func QueryCompany(ctx *gin.Context)  {
	companyId := ctx.Query("companyId")
	resp, err := bc.ChannelQuery("queryCompany", [][]byte{
		[]byte(companyId),
	})
	if err != nil {
		fmt.Println("ERROR: ", err.Error())
		ctx.String(http.StatusInternalServerError, err.Error())
		return
	}
	ctx.String(http.StatusOK, bytes.NewBuffer(resp.Payload).String())
}

那么今天区块链web控制器的编写就到这里了,等我有时间了,我会详细出一期,Hyperledger Fabric 搭建网络以及链码编写的详细教程。
一起努力吧!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

患孤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值