javascript - Javascript/NodeJS 中的 Protocol Buffer 字段选项

标签 javascript node.js protocol-buffers protoc

如何获取与 Protocol Buffer 字段关联的选项?

假设我有一个带有自定义选项的字段,例如:

syntax = "proto3";

package main;

import "google/protobuf/descriptor.proto";

extend google.protobuf.FieldOptions {
   bool required = 7000;
}

message Person {
  string name = 1 [(required) = true];
}

使用protoc生成js文件

protoc -I . *.proto --js_out=import_style=commonjs,binary:js

我已阅读 here 如何检索其他语言的选项,但似乎可以在 Javascript 中工作。

任何帮助将不胜感激!

最佳答案

不幸的是,这不受支持。

其他语言在生成的代码中嵌入了 proto 文件的“描述符”。描述符包含有关消息、其字段以及自定义选项的信息,全部采用二进制 protobuf 格式。请参阅descriptor.proto

生成读取扩展的代码。如果您有 FieldDescriptor,您可以读取您的 FieldOption 扩展。但是 Javascript 生成的代码中没有这个描述符。

有一个可能的解决方法:您可以使用 protoc 转储 .proto 文件的 FileDescriptorSet(请参阅 --descriptor_set_out 选项)。您可以使用 Javascript(来自 google-protobuf 的 proto.google.protobuf.FileDescriptorSet)读取此二进制消息,导航到您的消息、相关字段,然后读取您的扩展程序数据以获取自定义选项值。

关于javascript - Javascript/NodeJS 中的 Protocol Buffer 字段选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65282231/

相关文章:

node.js - 将流式处理与 Node 和 mssql 结合使用

javascript - 如何使用 Sinon.js stub 动态对象方法?

c++ - Protocol Buffer ParseFromString 不检查消息结尾

c++ - 是否可以在没有 pthread 的情况下构建 protobuf?

python-3.x - 如何将已编译的 Protocol Buffer 转换回 .proto 文件?

javascript - 通过 JQuery AJAX 请求向下拉列表添加选项(作为 json 对象)

javascript - 按下 ENTER 键时更改表单标签内的输入值

javascript - 为什么 `(console.error = console.trace)();` 在 Node.js 中会变成 `heap out of memory`?

javascript - 将 jquery 函数转换为 javascript

javascript - 等待所有回调完成执行,没有静态时间