# plus **Repository Path**: kittykat/plus ## Basic Information - **Project Name**: plus - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-09 - **Last Updated**: 2025-04-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 1.morm ### 安装 ``` go get -u gitee.com/kittykat/plus/v1/morm ``` ### 概览 * 基于[go.mongodb.org/mongo-driver/mongo](http://www.mongodb.com/zh-cn/docs/drivers/go/current)二次封装库 * 内置Model层,Model会自动追踪数据生成时间和更新时间 * 内置钩子(Before/After Create/Update/Delete/Find) * 支持链式/事务/索引/聚合操作 * 支持插件化编程 ``` 初始化 db := morm.Default(conn) db := morm.New(nil,conn,global) 查询 var list any var total int64 db.Model(model).Scopes(func(q *morm.Query) *morm.Query { return q.Where("id", 177) }).Find(&list, &total) 分页 db.Model(model).Page(1,10).Find(&list, &total) 注册插件 db.Use(plugins) 钩子签名 AfterFind(ctx context.Context, s *DB) error {} 全局约束 BeforeFind(ctx context.Context, s *DB) error { s.Scopes(query) } 查询本表数据前,先查其他表的数据 BeforeFind(ctx context.Context, s *DB) error { s.WithContext(context.Background()).Model(model).Scopes(query).Find(&list, nil) } ``` ## 2.rsa数据加密 ### 安装 ``` go get -u gitee.com/kittykat/plus/v1/rsax ``` ### 使用说明 #### 1. 创建rsa密钥对,默认在files目录下 ``` GenerateRSAKey() ``` #### 2. 对客户端请求数据解密 ``` 对get请求参数解密 query := r.URL.Query() rawQuery,err := ParseGetQuery(query["data"][0]) r.URL.RawQuery = rawQuery ``` ``` 对post请求参数解密 body, err := io.ReadAll(r.Body) data, err := ParsePostBody(string(body)) r.Body = io.NopCloser(bytes.NewBuffer([]byte(data))) //将post数据重新写入 ``` #### 3.将公钥给至客户端(可以放到头部或者cookie中,可以第一次请求时去获取公钥,将公钥缓存起来) ``` GetPublicKey() GetPublicKeyToBase64() ``` #### 4.前端请求部分示例 ``` //安装js加密解密库 pnpm install jsencrypt ``` ``` //封装加密函数 import JSEncrypt from "jsencrypt"; const parseMessage = (data: string) => { var encryptor = new JSEncrypt(); // 创建加密对象实例 // 缓存获取公钥 const pubKey = getStorage("X-Public-Key"); const pubKey = atob(getStorage("X-Public-Key")); //如果公钥被base64编码,则需要解码 encryptor.setPublicKey(pubKey); //设置公钥 return encryptor.encrypt(data); // 对内容进行加密 }; ``` ``` //http请求 let str = parseMessage(JSON.stringify(data)); //对数据加密前需要先将对象转换为json return Http("GET", "http://xxx/xxx", { data: str }); //对于get请求需要挂载一个对象属性上 let str = parseMessage(JSON.stringify({ data })); //对数据加密前需要先将对象转换为json return Http("POST", "http://xxx/xxx", str); ```