Как декодировать закодированные данные буфера протокола с помощью файла .proto в node.js

#node.js #protocol-buffers #decode #protobufjs

#node.js #буферы протокола #декодировать #protobufjs

Вопрос:

Я новичок в protocol buffer и пытаюсь декодировать данные из ответа api.

Я получаю закодированные данные из ответа API, и у меня есть файл .proto для декодирования данных, как мне декодировать данные в NodeJS. Я пытался использовать protobuf.js но я очень сбит с толку, я потратил часы, пытаясь решить свою проблему, просматривая ресурсы, но не могу найти решение.

Ответ №1:

Protobufjs позволяет нам кодировать и декодировать сообщения protobuf в двоичные данные и из двоичных данных на основе файлов .proto.

Вот простой пример кодирования, а затем декодирования тестового сообщения с использованием этого модуля:

 const protobuf = require("protobufjs");

async function encodeTestMessage(payload) {
    const root = await protobuf.load("test.proto");
    const testMessage = root.lookupType("testpackage.testMessage");
    const message = testMessage.create(payload);
    return testMessage.encode(message).finish();
}

async function decodeTestMessage(buffer) {
    const root = await protobuf.load("test.proto");
    const testMessage = root.lookupType("testpackage.testMessage");
    const err = testMessage.verify(buffer);
    if (err) {
        throw err;
    }
    const message = testMessage.decode(buffer);
    return testMessage.toObject(message);
}

async function testProtobuf() {
    const payload = { timestamp: Math.round(new Date().getTime() / 1000), message: "A rose by any other name would smell as sweet" };
    console.log("Test message:", payload);
    const buffer = await encodeTestMessage(payload);
    console.log(`Encoded message (${buffer.length} bytes): `, buffer.toString("hex"));
    const decodedMessage = await decodeTestMessage(buffer);
    console.log("Decoded test message:", decodedMessage);
}

testProtobuf();
  

И файла .proto:

 package testpackage;
syntax = "proto3";

message testMessage {
    uint32 timestamp = 1;
    string message = 2;
}
  

Комментарии:

1. Это работает. Но. теперь protobuf поддерживает javascript изначально.

2. это работает для меня. хороший ответ