提取protobuf定义文件结构
先安装protobuf的js支持包
npm install protobufjs
test.proto文件如下所示
syntax = "proto3";
package Test;
service Serv {
rpc ApiOne (ServOneRequest ) returns (stream ServOneReply) {};
}
service ServTwo{
rpc ApiTwo(ServTwoRequest)returns(ServTwoReply){};
}
message ServOneRequest{
string SyllabusID=1;
}
message ServOneReply{
string SyllabusID=1;
}
message ServTwoRequest{
repeated string Id=1;
}
message ServTwoReply{
EnumV EnumDemo=1;
}
enum EnumV
{
no = 0;
yes = 1;
}
load方法用于加载proto文件
var protobuf = require("protobufjs"); protobuf.load('F:/node-demo/test.proto', function (err, root) { //.... })
root对象:
上图中Test命名空间对应proto中的package Test
展开Test对象
Test对象包含文件的所有信息,如文件地址,服务,接口,message等nestedArrar包含文件内的所有结构(我粗略的理解为所有顶层的定义都在nestedArrar对象中),在这个对象中Service表示服务,Type表示message,Enum表示枚举,如需确定子元素具体类型可以从原型拿到,如
root.Test.nestedArray[0].__proto__.constructor.className //Service
继续向下查找包括具体的字段名字段属性,name,类型等都在里边这里就不一一展示了。