小程序http请求响应的protobuf的方法已经封装好了,下面是使用方式
举一个栗子: 后端提供了一个新的接口,它的protobuf请求和返回的message是: 冲突测试124123412341234 111111111
//登录请求 1005
message login_req
{
string phone1 = 1;
uint32 type = 2;//登录类型,1:密码登录,2:验证码登录
string verifyInfo = 3;//1密码,2验证码
int64 time = 4;//纳秒,游客登陆用的
uint32 systemType = 5;//系统类型,0全部,1:ios,2:android
}
//登录响应 1006
message login_rsp {
ErrorInfo errInfo = 1; // 错误码信息
uint32 id = 2;
string token = 3; // 访问令牌
string sskey = 4;
}
注意 不要直接copy过来,message的field的命名要按照驼峰命名原则,要不然会出问题。
如果确认字段是string类型就直接用string,不建议用bytes类型。
然后把这一段直接copy到项目目录下的proto文件夹下的xxx.proto文件中去
然后使用以下命令生成bunble.js文件,注意每次改变了proto文件都要通过下面命令重新生成一下js文件
npm run proto
或者
npx pbjs -t static-module -w commonjs -o proto/bundle.js proto/*.proto
const protoMap = {
1005: user.login_req,//登录请求
1006: user.login_rsp,//登录返回
// ... more
}
request({
server:2,//后端提供的此接口的server
servant:1005,//后端提供的此接口的servant
data:{
//对应loginReq的phone字段,如果proto文件里是bytes类型,
//可以通过Buffer.from('3246541321')来转换
//例如: phone:Buffer.from('3246541321'),
phone:'13246541321',
type:1,//同上
verifyInfo:'asdasd'//同上
}
})
.then((res) =>{
/* res的结构
{
code:0,错误码 number类型
msg:"",错误消息 string类型
data:对应loginRsp的js对象
}
*/
if(res.code === 0){//成功
}else{
//失败
}
}, (err) => {//出现异常
console.log(err);
})
多接口串联调用:举个栗子
async function someFun(){
let res1 = await post({
server:2,
servant:1005,
data:{ ......}
})
let res2 = await post({
server:2,
servant:911,
data:{ var1:res1.data.somefield,
......}
})
}
封装的接口返回的是promise对象,promise的用法可以去https://developer.mozilla.org/zh-CN/ 搜索