Nodejs require('protobuf_for_node') 请问这个依赖包哪里能下到 找了一天了没找到。

Nodejs require(‘protobuf_for_node’) 请问这个依赖包哪里能下到 找了一天了没找到。

require(‘protobuf_for_node’) 请问这个依赖包哪里能下到找了一天了没找到。

7 回复

Node.js require('protobuf_for_node') 依赖包下载指南

问题描述

最近尝试使用 require('protobuf_for_node') 来处理 Protocol Buffers 数据,但在 npm 和 GitHub 上搜索了一整天也没能找到这个包。希望有人能提供一些指导。

解决方案

实际上,protobuf_for_node 并不是一个广泛使用的包名。你可能指的是 protobufjs 或者 google-protobuf 这样的库。这两个库都是处理 Protocol Buffers 的流行选择。

示例:使用 protobufjs
  1. 安装 protobufjs

    npm install protobufjs
    
  2. 加载和使用 protobufjs

    假设你有一个 .proto 文件定义了你的数据结构:

    syntax = "proto3";
    
    message Person {
        string name = 1;
        int32 id = 2;
        string email = 3;
    }
    

    你可以通过以下步骤来使用 protobufjs 加载并解析这个文件:

    const protobuf = require("protobufjs");
    
    // 加载 .proto 文件
    protobuf.load("person.proto", function(err, root) {
      if (err) throw err;
    
      // 获取消息类型
      var Person = root.lookupType("Person");
    
      // 创建数据对象
      var payload = { id: 1234, name: "John Doe", email: "jdoe@company.com" };
    
      // 验证数据
      var errMsg = Person.verify(payload);
      if (errMsg) throw Error(errMsg);
    
      // 编码为二进制
      var buffer = Person.encode(Person.create(payload)).finish();
    
      // 解码回对象
      var decodedPayload = Person.decode(buffer);
      console.log(decodedPayload);
    });
    
示例:使用 google-protobuf

如果你需要处理的是 Google 定义的 .proto 文件,比如那些来自 gRPC 的,可以考虑使用 google-protobuf

  1. 安装 google-protobuf

    npm install google-protobuf
    
  2. 使用 google-protobuf

    如果你有一个 .proto 文件定义了 Person 消息,可以先使用 protoc 编译器生成对应的 JavaScript 类:

    protoc --js_out=import_style=commonjs,binary:. person.proto
    

    然后在 Node.js 中使用生成的类:

    const { Person } = require("./person_pb");
    
    // 创建数据对象
    const person = new Person();
    person.setId(1234);
    person.setName("John Doe");
    person.setEmail("jdoe@company.com");
    
    // 序列化为二进制
    const binaryData = person.serializeBinary();
    
    // 反序列化
    const decodedPerson = Person.deserializeBinary(binaryData);
    console.log(decodedPerson.toObject());
    

通过上述方法,你应该能够找到合适的库来处理你的 Protocol Buffers 数据。希望这能帮到你!


不是都从 mirror 下载的么, 不懂楼主意思

npm install protobuf

不知道有 npmjs.org ?

貌似 protobuf 这个不支持 0.10.x

需要支持 0.10.x 可以选择这个 https://npmjs.org/package/node-protobuf

对于这个问题,protobuf_for_node 这个库似乎已经不再维护,并且可能已经被其他库所替代。你可以尝试使用 protobufjs 或者 google-protobuf 这些更为流行和维护良好的库来处理 protobuf 文件。

示例:使用 protobufjs

首先,你需要安装 protobufjs

npm install protobufjs

然后,你可以使用以下代码加载和解析 .proto 文件:

const protobuf = require("protobufjs");

// 加载 .proto 文件
protobuf.load("./path/to/your/file.proto", function(err, root) {
    if (err) throw err;

    // 获取消息类型
    var myMessage = root.lookupType("package.MessageName");

    // 解析二进制数据
    var buffer = new ArrayBuffer(...);  // 假设这是你的二进制数据
    var message = myMessage.decode(new Uint8Array(buffer));

    console.log(message);
});

示例:使用 google-protobuf

同样地,首先安装 google-protobuf

npm install google-protobuf

然后可以这样使用:

const { protobuf } = require("google-protobuf");
const fs = require("fs");

// 读取 .proto 文件
const content = fs.readFileSync("./path/to/your/file.proto");

// 使用 google-protobuf 的加载器来解析 .proto 文件
protobuf.parse(content, (err, parser) => {
    if (err) throw err;

    // 获取消息类型
    const MessageType = parser.lookupType("package.MessageName");

    // 解析二进制数据
    const binaryData = ...;  // 这里是你从某个地方获取的二进制数据
    const message = MessageType.fromBinary(binaryData);

    console.log(message);
});

请注意,上述代码中的路径和具体消息类型需要根据实际情况进行调整。

回到顶部