如何让protobuf.js输出枚举字符串而不是整数

Tob*_*obi 8 protocol-buffers node.js protobuf.js

我正在使用最新的protobuf.js和Node.js 4.4.5.

我目前很难protobuf.js输出枚举的字符串定义而不是整数.我尝试了几个建议,但没有一个有效:

我想这是因为protobuf.js第一个API的变化.对于第二个,我可以部分使用建议的解决方案,但如果消息嵌套在其他消息中,则构建器似乎回退到使用整数值,尽管已明确设置字符串值.

理想情况下,我想覆盖用于生成枚举值的函数,但我很难用调试器找到正确的函数.或者有更好的方法来实现深层嵌套对象吗?

k1e*_*ran 5

生成的 JS 代码protoc仅具有一个方向的地图,例如

 proto.foo.Bar.Myenum = {
  HEY: 0,
  HO: 1
};
Run Code Online (Sandbox Code Playgroud)

这样做的理由在这里 ,但你必须在你自己的 JS 代码中进行反向查找。对此有很多简单的解决方案。我使用了/sf/answers/4155223061/ 上的那个

通用反向映射器函数...

 export function getKey(map, val) {
  return Object.keys(map).find(key => map[key] === val);
}
Run Code Online (Sandbox Code Playgroud)

UT...

import { Bar } from "js/proto/bar_pb";

expect(getKey(proto.foo.Bar.Myenum, 0)).toEqual("HEY");
expect(getKey(proto.foo.Bar.Myenum, 1)).toEqual("HO");
expect(getKey(proto.foo.Bar.Myenum, 99)).toBeUndefined();
Run Code Online (Sandbox Code Playgroud)