小程序中使用http请求,发送和接受protobuf数据
参考文章:(https://juejin.cn/post/6965049311100928013)(https://blog.csdn.net/d7185540/article/details/85105758)
1.安装node环境
2.在全局安装 protobufjs
npm install -g protobufjs
3.安装完成以后 cmd 输入 pbjs 看是否安装成功
pbjs
4.将proto文件转为json文件
pbjs -t json order.proto > order.json
5.生成的order.json
{
"nested": {
"AwesomeMessage": {
"fields": {
"awesomeField": {
"type": "string",
"id": 1
}
6.json文件是不能直接使用的,因此我们可以创建一个order.js文件,将json中的数据,复制粘贴在js文件中
module.exports = {
"nested": {
"AwesomeMessage": {
"fields": {
"awesomeField": {
"type": "string",
"id": 1
}
}
}
}
};
7.然后下载weichatPb文件,将weichatPb文件放到项目中
8.在http请求中使用
const serverUrl ='地址 ';
var protobuf = require('@/weichatPb/protobuf.js'); // 使用下载好的 weichatPb文件
const awesomeConfig = require('@/proto/order.js'); // 使用创建的js文件
var AwesomeRoot = protobuf.Root.fromJSON(awesomeConfig);
var AwesomeMessage = AwesomeRoot.lookupType("req_PublicNews"); // req_PublicNews为message
var resModel = AwesomeRoot.lookupType("res_Model"); // res_Model 为message
const timeout = 15000
export class Api {
static getOrder() {
var payload = {httpUserInfo:{userName:"admin",userGuid:"c33de6cc-1727-48cf-8843-39aa60b25d5a"}}; // 发送的参数
var message = AwesomeMessage.create(payload);
var buffer = AwesomeMessage.encode(message).finish();
var requestBuffer = new Uint8Array([...buffer]).buffer; // 序列化数据
var url = "/ssm/model/model"
uni.request({
url: serverUrl + url,
method: "POST",
dataType: 'protobuf',
data: requestBuffer,
responseType:"arraybuffer",
timeout: timeout,
header: {
"X-Requested-With": "XMLHttpRequest",
"Content-Type": "application/octet-stream",
},
success(res){
var deMessage = resModel.decode(res.data); // 转为对象化的数据
console.log(deMessage)
}
});
}
}