Javascript 如何将protobuf base64字符串解码为js对象

Javascript 如何将protobuf base64字符串解码为js对象,javascript,protocol-buffers,protobuf.js,Javascript,Protocol Buffers,Protobuf.js,我试图将protobuf消息从服务器端(base64字符串)解码为javascript对象。用于解码 正如doc所建议的: var builder = ProtoBuf.newBuilder({ convertFieldsToCamelCase: true }); var YourMessage = builder.build("YourMessage"); var buffer = ...; // E.g. a buffer received on a WebSocket var myMess

我试图将protobuf消息从服务器端(base64字符串)解码为javascript对象。用于解码

正如doc所建议的:

var builder = ProtoBuf.newBuilder({ convertFieldsToCamelCase: true });
var YourMessage = builder.build("YourMessage");
var buffer = ...; // E.g. a buffer received on a WebSocket
var myMessage = YourMessage.decode(buffer);
...
var b64str = ...; // E.g. a string fetched via AJAX
var myMessage = YourMessage.decode64(b64str);
这就是我尝试的方法(data-base64字符串):

我犯了一个错误

解码/解码64未定义


缺少导入proto定义的行,如下所示(其中tests/example1.proto是您的文件名)

ProtoBuf.loadProtoFile(“tests/example1.proto”,builder)

或者如果从proto字符串加载

ProtoBuf.loadProto(…protoString…,“example1.proto”)


如果没有这一点,构建器将说未定义,因为它无法使用

构建其定义。我看不到在该代码中,您正在加载定义protobuf模式的proto文件或文本。您应该有一行类似于
ProtoBuf.loadProtoFile(“tests/example1.proto”,builder)告诉它.proto定义的位置。这就解释了构建器没有构造消息以及您使用的空值getting@PhilipPryde谢谢,我丢了描述符。那对你有用吗?如果是这样,我会把我的评论变成一个答案…@PhilipPryde是的,当然
var proto = dcodeIO.ProtoBuf;
var buffer = dcodeIO.ByteBuffer;
var b = buffer.wrap(data,"binary");
var builder = proto.newBuilder({ convertFieldsToCamelCase: true });
builder.define("Events");
var message = builder.build("Events");
var result = message.decode(b); //also try to decode base64 string - message.decode64(data);