问题标签 [protobuf.js]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
94 浏览

javascript - 如何在javascript版本的protobuf中获取自定义选项值?

我将自定义选项用于静态映射目的。在 python、java、c++ 代码中一切正常。但是生成js代码的时候,自定义选项字段就不见了。

我做了什么 :

我正在使用 proto3 并使用 ubuntu。

0 投票
1 回答
104 浏览

nativescript - 如何在 NativeScript 中使用 Protobuf?

我想在 NativeScript 应用程序中使用 protobuf,但是我正在努力弄清楚如何使用,因为 NativeScript似乎不支持网络上的二进制文件。

我知道 NativeScript 应用程序可以使用 protobuf,因为我很确定nativescript-plugin-firebase可以。这个插件如何能够使用 protobuf?

0 投票
0 回答
516 浏览

jestjs - 使用 protobuf 进行 Jest 模拟测试

我很好奇是否有使用 jest 的测试示例,在 build/protobuf 中使用动态生成的节点客户端

我正在实现一个节点客户端,它动态生成它正在调用的服务的 protobuf 文件,并通过 grpc 调用该服务。我很困惑我们如何模拟 .proto 文件

0 投票
1 回答
951 浏览

c# - 在 C# 中解码没有模式的 protobuf

我有以下 protobuf 文本,并想在 C# 中反序列化。我已经尝试了下面的代码,但它一直抛出错误'类型不是预期的,并且无法推断出任何合同: System.Object。我知道我需要一个模式是否有办法将 protobuf 文本数据转换为字符串或 Json。我正在使用 Marc Gavell 库 protobuf-net。

protobufSingleEntry.txt

0 投票
3 回答
5865 浏览

protocol-buffers - 如何在 ProtoBuf (gRPC) - Proto3 语法中添加消息类型作为对象?

如何在 ProtoBuf - Proto3 语法中将消息类型作为对象发送?

我想传输对象而不是字符串或数字。

例子

在这里,我收到错误

--

解决方法

我可以在服务器端将它转换为字符串,然后我可以在客户端 JSON.parse()。

但我想知道,是否有更好的方法来做到这一点。

0 投票
1 回答
262 浏览

protocol-buffers - 关于默认值,如何在 GO 和 JS 之间进行标准序列化输出?

我取一段数据并将其放在 GO 和 JS 中的 protobuf 中,然后在每个平台上对 PB 进行编码,得到的序列化值不同。由于我们使用编码值进行签名和散列,因此它们匹配至关重要。据我所知,我认为不同之处在于 JS 在编码输出中包含默认值,而 GO 没有。

两个平台都从同一段 JSON 开始。这是GO:

来自 GO 的 base64 编码值为:

下面是 JS 的作用:

结果是:

...这与 GO 提出的不同。

如果我将这两个 base64 字符串都带入 JS,将它们解码为 PB,然后toJSON()将 PB 解码并查看两个对象的差异,看起来不同之处在于 JS 正在序列化默认值而 GO 不是(JS 开启正确的)。

在此处输入图像描述

我试过这样序列化 JS,但结果是一样的:

那么,有什么方法可以使两个平台之间的输出保持一致?原始 JSON 输入是相同的,但输出的结果不同。

0 投票
0 回答
336 浏览

javascript - 在javascript中从protobuf解码序列化数据

我尝试使用 protobuf.js 在 javascript 中解码 protobuf 消息,但得到错误:Error: invalid wire type 4 at offset 3.

我有这样的'message.proto'结构:

代码:

如何获取每个内部 Obj 消息的字节并对其进行解码?

0 投票
3 回答
12899 浏览

angular - 如何在 gRPC Angular 应用程序中使用 typescript protobuf 生成的文件

总结问题

我正在学习如何使用 gRPC,并想尝试进行客户端-服务器连接。服务器(在 Elixir 中)工作正常,但我遇到了一些问题。但由于我主要是后端开发人员,在 Angular 中实现它时遇到了更多麻烦,希望能得到一些帮助。

我在这个项目中使用Angular 8.2.9Angular CLI 8.3.8Node 10.16.0

我已经做了什么?

  1. 创建了一个新的 Angular cli 项目ng new test-grpc
  2. 使用 生成一个模块和一个组件ng g...,并修改基本路由以具有工作页面和 url。
  3. 安装的 Protobuf 和 gRPC 库npm install @improbable-eng/grpc-web @types/google-protobuf google-protobuf grpc-web-client protoc ts-protoc-gen --save
  4. .proto从我的 Elixir 代码中获取文件并将其复制到文件夹中src/proto
  5. protoc在 package.json 中添加了一个命令scripts "protoc": "protoc --plugin=protoc-gen-ts=./node_modules/.bin/protoc-gen-ts.cmd --js_out=import_style=commonjs,binary:src/app/proto-gen --ts_out=service=true:src/app/proto-ts -I ./src/proto/ ./src/proto/*.proto"
  6. 调用命令生成在和中找到的js和tssrc/app/proto-ts文件src/app/proto-js
  7. 在生成的文件的名称中_替换为任何。-
  8. 然后我尝试在 ngOnInit 中添加以下代码:https://github.com/improbable-eng/grpc-web/tree/master/client/grpc-web#usage-overview例如:

我试过了:

  • 在构造函数参数中创建请求。
  • 找到如何添加打字稿文件(我只找到在角度项目中添加javascript文件的方法,生成的javascript比打字稿重得多,没有任何解释)。
  • 要了解 jspb.Message 是什么(我仍然不知道,但我认为它链接到这个文件:https ://github.com/protocolbuffers/protobuf/blob/master/js/message.js )
  • 试图找到有关如何在 Angular 应用程序中实现 rGPD 的教程(404 未找到)

.proto 文件、两个 typescript 生成的文件以及尝试使用它们的组件

.proto 文件():

打字稿生成的代码(2个文件):

尝试在组件文件中使用它们:

预期结果和实际结果

我希望能够在组件(或服务)中使用非角度打字稿代码。 由于生成了上面的代码(但组件文件),它不应该被修改,因为对.proto文件的任何更改都会覆盖在这两个生成的文件中所做的任何修改。

现在,我被这两条错误消息阻止了,这取决于我最后保存的文件TypeError: _proto_ts_user_pb_d__WEBPACK_IMPORTED_MODULE_4__.ListUsersRequest is not a constructor:(如果我最后保存了 protobuf 生成的文件,控制台中没有错误)或src\app\proto-ts\user-pb-service.d.ts and src\app\proto-ts\user-pb.d.ts is missing from the TypeScript compilation. Please make sure it is in your tsconfig via the 'files' or 'include' property.(如果我最后保存了 angular 文件,同样的错误控制台中的消息)。

在中添加“文件”或“包含” tsconfig.json(这是由 Angular CLI 生成的,未经任何修改)会产生另一个错误:Refused to load the image 'http://localhost:4200/favicon.ico' because it violates the following Content Security Policy directive: "default-src 'none'". Note that 'img-src' was not explicitly set, so 'default-src' is used as a fallback.

0 投票
0 回答
1216 浏览

typescript - 使用 ts-protoc-gen 从 .protobuf 文件生成类型定义,结果仅包含原始接口定义,除了 jspb.Message 原型

我正在使用protobuf库来为平台之间共享的数据结构生成代码。其中一个平台是 nodejs,我在上面使用 typescript。所以除了协议编译器(https://developers.google.com/protocol-buffers/docs/reference/javascript-generated)我还使用ts-protoc-gen插件(https://github.com/improbable-eng/ts -protoc-gen ) 以生成类型定义,以便对生成的代码使用静态类型。

ts-protoc-gen 不仅应该生成简单的接口定义,还应该基于 .proto 文件中定义的消息生成实际的类定义。我已经为其中一个插件示例 orphan.proto 生成了类型定义。 https://github.com/improbable-eng/ts-protoc-gen/blob/master/proto/orphan.proto 提供了应该生成的结果,例如。对于 OrphanMessage 看起来像这样:

(来源https://github.com/improbable-eng/ts-protoc-gen/blob/master/examples/generated/proto/orphan_pb.d.ts

但我得到的结果只是一个原始接口,实际上由于样式不同,它与 _pb.js 文件中生成的 .js 代码不兼容。

有人知道为什么我没有得到 jspb.Message 原型吗?我使用以下命令生成带有类型定义的 .js 代码

0 投票
1 回答
685 浏览

node.js - 无法使用 protobuf.js 加载 protobuf 消息

我试图将 proto 消息与 protobuf.js 一起使用,对它们进行编码并将它们发送到 RabbitMQ 消息代理。我的项目中有以下子文件夹:

我在 rmq-api.js 文件中添加了一个执行以下操作(使用 express)的路由:

在 RabitMQ.js 文件中,我有以下代码:

在上面显示的代码行中: protobuf.load("./protos/transactions.proto").then((err, root) => { 我一直遇到以下错误: 在此处输入图像描述

在这个 catch 块内:

这似乎是一个非常简单的问题,但是我在网上没有找到任何东西,所以我可能在这里遗漏了一些非常简单的东西。PS 我尝试使用 __dirname + "/protos/transaction.proto" 仍然无法让它工作。请帮我解决这个问题。