先安装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,类型等都在里边这里就不一一展示了。

------------------分割线---------------------------------

提取注释

看了一上午官方文档终于找到了提取文件中注释的方法,上图中每个消息、服务、字段等等属性里都有一个comment字段用于存放注释,注释编写规范为/**注释文本*/,官方规范说支持C/C++注释原文如下

有兴趣的朋友可以去测试一下

提取protobuf定义文件结构的更多相关文章

  1. OrCAD Capture CIS 16.6 从PDF文档中提取引脚定义,实现快速地编辑Part的引脚名称

    操作系统:Windows 10 x64 工具1:OrCAD Capture CIS 16.6-S062 (v16-6-112FF) 工具2:Excel 工具3:Solid Converter 打开需要 ...

  2. 使用Protobuf定义网络协议

    准备工具: 工具下载地址如下:https://github.com/protocolbuffers/protobuf/releases/tag/v3.6.1,主要使用到的文件有: protoc.exe ...

  3. google protocol buffer——protobuf的问题及改进一

    这一系列文章主要是对protocol buffer这种编码格式的使用方式.特点.使用技巧进行说明,并在原生protobuf的基础上进行扩展和优化,使得它能更好地为我们服务. 在上一篇文章中,我们完整了 ...

  4. Protobuf使用规范分享

    一.Protobuf 的优点 Protobuf 有如 XML,不过它更小.更快.也更简单.它以高效的二进制方式存储,比 XML 小 3 到 10 倍,快 20 到 100 倍.你可以定义自己的数据结构 ...

  5. SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题

    用户定义函数(UDF)分类  SQL SERVER中的用户定义函数(User Defined Functions 简称UDF)分为标量函数(Scalar-Valued Function)和表值函数(T ...

  6. Protobuf for Python测试保存和读取文件

    安装pip, setuptools, and wheel 如果已经从python.org,安装啦Python 2 >=2.7.9 or Python 3 >=3.4 ,那么就已经有啦pip ...

  7. Google 开源技术protobuf

    http://blog.csdn.net/hguisu/article/details/20721109#0-tsina-1-1601-397232819ff9a47a7b7e80a40613cfe1 ...

  8. 解决protobuf不能直接在IOS上使用,利用protobuf-net在IOS上通讯

    ---------------------------------------------------------------------------------------------------- ...

  9. REGEX.C GNU 提取过滤数据

    今天被@SVCHAO  勾起兴趣来了.. 有把正则表达式兴趣捡起来了,试了下notepad++基本上语法倒是没有忘记,不过如果是用在嵌入式的方案的话,似乎还是有点费劲的. 先mark一个基础语法. 单 ...

  10. Google protobuf proto文件编写规则

    转载自: http://blog.csdn.net/yi_ya/article/details/40404231 1. 简单介绍 protobuf文件:就是定义你要的消息(类似java中的类)和消息中 ...

随机推荐

  1. hvv蓝初面试常见漏洞问题(下)

    hvv蓝初面试常见漏洞问题(上) 6.ssrf 服务端伪造请求 原理 服务端提供了向其他服务器应用获取数据的功能,而没有对目标地址做任何过滤和限制.攻击者进而利用其对内部资源进行攻击.(通俗来说:就是 ...

  2. 新版本,ggplot2 v3.3.0 新特性来袭

    ggplot2 迎来了新的版本,官方宣布了一些新的特性.下面一起看看吧. 1. 轴代码重写 这有利于解决轴标签重叠的情况. 2. 新的 scale bin,它可以像使用 color, fill 一样使 ...

  3. Dapr在Java中的实践 之 服务调用

    服务调用 通过服务调用(Service-to-service Invocation),服务可以使用 gRPC 或 HTTP 这样的标准协议来发现并可靠地与其他服务通信. Dapr采用边车(Sideca ...

  4. 【Python&GIS】矢量数据投影转换(WGS84转地方坐标系)

         又是掉头发的一天,今天的任务是将WGS84坐标系的点转成地方坐标系,并判断点是否在某个面内,找了半天的资料什么四参数.七参数啥的太复杂了.这里使用Python的ogr, osr库内置的坐标转 ...

  5. 聊聊Cola-StateMachine轻量级状态机的实现

    背景 在分析Seata的saga模式实现时,实在是被其复杂的 json 状态语言定义文件劝退,我是有点没想明白为啥要用这么来实现状态机:盲猜可能是基于可视化的状态机设计器来定制化流程,更方便快捷且上手 ...

  6. 解决适用EntityFramework生成时报错“无法解析依赖项。"EntityFramework 6.4.4" 与 ' EntityFramework.zh-Hans 6.2.0 约束:EntityFramework(=6.2.0)'不兼容。"

    起因:通过vs2022创建mvc项目时, 执行添加"包含视图的MVC5控制器(使用Entity Framework)时 点击添加,出现错误提示  解决方法: 在您的解决方案资源管理器中,右键 ...

  7. C#语言async, await 简单介绍与实例(入门级)

    本文介绍异步编程的基本思想和语法.在程序处理里,程序基本上有两种处理方式:同步和异步.对于有些新手,甚至认为"同步"是同时进行的意思,这显然是错误的. 同步的基本意思是:程序一个个 ...

  8. IoTOS v1.0.0 开源 高效 实用 | 免费商用

    IoTOS v1.0.0 一款高效实用 IoTCard 管理 & 运营系统. IoTOS 目前取名范围过大,其主要用于IoTCard 管理业务以高效.健壮.灵活设计 SaaS.多语言.机器人推 ...

  9. Linux 压缩文件用法

    # tar 命令:可以用来压缩或解压缩文件: # 压缩 tar -czvf filename.tar.gz files # 解压缩 tar -xzvf filename.tar.gz # gzip 命 ...

  10. GitLab 无仓库 中了勒索病毒

    坑爹的记录一下,并没有解决 Gitlab 昨天(2021-11-29)打开之后看不到项目了,下面这个吊样子 最后发现中病毒了,一堆的这个吊毛文件,复制一个打开看了一下 你别说这个黑客网页写的还不错,这 ...