Javascript/NodeJS 中的协议缓冲区字段选项

Protocol Buffer Field Options in Javascript/NodeJS

如何获得与协议缓冲区字段关联的选项?

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

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 中似乎可以正常工作。

如有任何帮助,我们将不胜感激!

很遗憾,这不受支持。

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

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

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