houjie 4 年之前
父節點
當前提交
7764bc27d2
共有 1 個文件被更改,包括 14 次插入46 次删除
  1. 14 46
      小程序使用protobuf.md

+ 14 - 46
小程序使用protobuf.md

@@ -10,9 +10,9 @@
 //登录请求 1005
 message login_req
 {
-    bytes  phone            = 1;
+    string  phone            = 1;
     uint32 type             = 2;//登录类型,1:密码登录,2:验证码登录
-    bytes  verifyInfo      = 3;//1密码,2验证码
+    string verifyInfo      = 3;//1密码,2验证码
     int64  time				= 4;//纳秒,游客登陆用的
     uint32 systemType      = 5;//系统类型,0全部,1:ios,2:android
 
@@ -22,8 +22,8 @@ message login_req
 message login_rsp {
     ErrorInfo errInfo  = 1; // 错误码信息
     uint32   id       = 2;
-    bytes    token    = 3; // 访问令牌
-    bytes sskey       = 4;
+    string    token    = 3; // 访问令牌
+    string sskey       = 4;
 }
 ```
 **注意 不要直接copy过来,message的field的命名要按照驼峰命名原则,要不然会出问题。**
@@ -36,49 +36,14 @@ message login_rsp {
 npx pbjs -t static-module -w commonjs -o proto/bundle.js proto/*.proto
 ```
 
-### 第二步:coding request message的编码和response message的解码
+### 第二步:在protoMap.js里面添加servant对应的message
 在common下protoMap.js里面添加请求message的编码方法,和响应message的解码方法
 
 ```js
-//1005 是后端提供的此接口的servant
-protoMap['1005'] = {
-	requestEncode: function(request) { //登录请求的编码
-		//创建login_req的message对象
-		let loginMessage = user.login_req.create({
-			type: request.data.type,
-			//如果phone定义的是bytes,这里要转换一下,
-			//如果phone定义的是string,这里就不需要Buffer.from了
-			//要确认phone是string类型,才能把phone的bytes更换成string
-			phone: Buffer.from(request.data.phone),
-			//同phone,在proto文件中字段名(verifyInfo)最好用驼峰命名规则,不要用verify_info
-			verifyInfo: Buffer.from(request.data.verifyInfo),
-		})
-		//login_req的message 编码转换为Buffer数据
-		let buffer = user.login_req.encode(loginMessage).finish()
-		//返回请求的ArrayBuffer
-		return getRequestBuffer(request,buffer)
-	},
-	responseDecode: function(response) { //登录响应的解码
-		//得到loginRsp message的buffer数据
-		let loginRspBuf = getResponseDataBuf(response)
-		//解码得到loginRsp的message对象
-		let loginRspMessage = user.login_rsp.decode(loginRspBuf)
-		//把loginRsp Message对象转换为js对象
-		let obj = user.login_rsp.toObject(loginRspMessage, {
-			longs: String,
-			enums: String,
-		})
-		//如果proto定义的字段是bytes,在这里可以转换成一下String
-		//也可以直接在proto文件中把字段的bytes 类型 替换成string类型,
-		//但是要确认这个字段是string类型的,string类型在这里就不需要转换了
-		if(typeof obj.errInfo.errorMessage !== 'undefined'){
-			obj.errInfo.errorMessage = Buffer.from(obj.errInfo.errorMessage).toString()
-		}
-		if(typeof obj.token !== 'undefined'){
-			obj.token = Buffer.from(obj.token).toString()
-		}
-		return obj
-	}
+const protoMap = {
+	1005: user.login_req,//登录请求
+	1006: user.login_rsp,//登录返回
+        // ... more
 }
 ```
 
@@ -90,7 +55,10 @@ post({
 	server:2,//后端提供的此接口的server
 	servant:1005,//后端提供的此接口的servant
 	data:{
-		phone:'13246541321',//对应loginReq的phone字段
+                //对应loginReq的phone字段,如果proto文件里是bytes类型,
+                //可以通过Buffer.from('3246541321')来转换
+                //例如: phone:Buffer.from('3246541321'),
+		phone:'13246541321',
 		type:1,//同上
 		verifyInfo:'asdasd'//同上
 	}
@@ -124,7 +92,7 @@ async function someFun(){
 	  let res2 = await post({
 		  server:2,
 		  servant:911,
-		  data:{ filed1:res1.data.somefield,
+		  data:{ var1:res1.data.somefield,
 		  ......}
 	  })
 	}