protobuf

  1. .proto -> .js
    安装
npm install --save google-protobuf //安装,用来编译xxx.proto文件 => xxx_pb.js

编译

protoc --js_out=import_style=commonjs,binary:. xxxxxxxx.proto 
//转化成js文件到同目录下
//--js_out=import_style=commonjs,binary:protos:this contains the options import_style=commonjs and binary and outputs to the directory protos.
//包含操作import_style=commonjs和二进制文件,并输出到目录原型。(这里可能翻译不对,请指教)

报错:

 for the proto file: after/cocoerrorcode.proto. Please use 'syntax = "proto2";' or 'syntax = "proto3";' to specify a syntax version. (Defaulted to proto2 syntax.)

在.proto文件最上面添加syntax = “proto2”

2.安装相关的库

npm install --save rfc4648 //用来解密64位编码的数据
npm install --save protobufjs //主要功能是解析.proto 文件,构建message类,和简单的编码、解码

3.header哈希加密

import axios from 'axios'

Vue.prototype.$axios = axios
axios.defaults.headers.post['AES-HASH'] = 'xxxxxx'//加密方式

4.编辑数据

  import {base64} from 'rfc4648'//用来解密

  import xxxxxapp from '../../proto/xxxxxapp_pb.js'
  import xxxproxy from '../../proto/xxxproxy_pb'
  import protobuf from 'protobufjs'

  const object = {
          'userId': '''token': '',
          'timeseq': 0
        }
  const object = new xxxproxy.xxxproxyRequest()//后端定义的方法,这里用来定义一个对象
  //赋值开始
  object.setUid(112562456)
  object.setMethod('methodName')        //设置方法
  object.setToken('de5664544ds65')
  const tem = new xxxxxapp.methodName() //定义要传进去的数据
  tem.setUid(112562456)                 //真正的赋值
  tem.setPhone('14263158955')
  object.setParam(tem.serializeBinary())//将tem序列化
  ......[省略各种设备等的赋值]
  //赋值结束
  //序列化
  const data = object.serializeBinary()
  //转64位编码
  const base64 = protobuf.util.base64.encode(data, 0, data.length)
  object.reqdata = base64
  object.length = data.length
  const reqdata = JSON.stringify(object)//数据转字符串
  const realdata = escape(reqdata)      //加密数据,这个是我们真正要的数据

解密

const res = data //请求以后的数据
const base64req = base64.parse(res)//64位解密
const tem = xxxproxy.xxxxxxx.deserializeBinary(base64req)//xxxproxy.proto里面写好的方法xxxxxxx
const response data = xxxxxapp.xxxxx.deserializeBinary(tem.getRspdata())//xxxxxapp.proto里面写好的方法xxxxx,getRspdata()这个方法也是后端定义好的

以上是做过的某个项目里的protobuf传数据的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值