- .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传数据的方法