当前位置:   article > 正文

Nodejs中使用Protobuf的.proto文件_nodejs grpc 加载多个 .proto 文件

nodejs grpc 加载多个 .proto 文件

egret的protobuf配置:https://github.com/WanderWang/protobuf-egret/

以下是Nodejs的:

  1. zzz.proto文件:
  2. package zzz;
  3. option optimize_for = LITE_RUNTIME;
  4. message Account{
  5. required string accountName = 1; //帐号名
  6. required string pwd = 2; //帐号密码
  7. }
  8. message AccountList{
  9. required int32 index = 1;
  10. repeated Account list = 2;
  11. }


  1. 方法1:
  2. var ProtoBufJs = require("protobufjs");
  3. var root = ProtoBufJs.loadSync("./zzz.proto");
  4. var AccountList = root.lookupType("zzz.AccountList");
  5. var Account = root.lookupType("zzz.Account");
  6. var accountListObj = AccountList.create();
  7. for(var i = 0; i < 10; i++){
  8. var accountObj = Account.create();
  9. accountObj.accountName = "断天涯"+i;
  10. accountObj.pwd = "密码"+i;
  11. accountListObj.list.push(accountObj);
  12. }
  13. var buffer = AccountList.encode(accountListObj).finish();


  1. 方法2:
  2. var ProtoBufJs = require("protobufjs");
  3. var root = ProtoBufJs.loadSync("./zzz.proto");
  4. var AccountList = root.lookupType("zzz.AccountList");
  5. var Account = root.lookupType("zzz.Account");
  6. var accountObj = Account.fromObject({pwd:"密码666", accountName:"断天涯666"});//直接生成对象
  7. var accountListObj = AccountList.fromObject({index:"0", list:{accountObj}});//直接生成对象
  8. var buffer = AccountList.encode(accountListObj).finish();


  1. 方法3:安装完成protobufjs后,在node_module/.bin/有pbjs.cmd 可以生成对应的proto的js代码;通过.proto生成.js文件,然后使用.js
  2. a、首先已安装protobufjs
  3.     npm install protobufjs
  4. b、装完以后,可以用cmd命令导出.js文件和.d.ts文件,对应文件路径自己百度去设置,第一行导出js文件,第二行把导出的js生成对应的.d.ts文件,这样就可以在TS代码中调用了。
  5.     -t -static-module参数,表示选的是静态代码模式。
  6.     -w commonjs表示用什么标准来输出js代码,有各种比如es2015、es5、umd、amd什么的,然而我对js不太熟悉,总之只有commonjs可以执行成功,其他都会报错什么的(.d.ts文件反正我是不需要,白鹭引擎看看需要不)
  7.     生成.js: pbjs -t static-module -w commonjs -o zzz.js zzz.proto
  8.     生成.d.ts:pbts -o zzz.d.ts zzz.js
  9. c、具体使用
  10.     var zzzProto= require("./zzz");
  11.     var accountObj = zzzProto.zzz.Account.create(); //使用zzz.js里文件的方法生成对象
  12.     var accountListObj = zzzProto.zzz.AcountList.create();//使用zzz.js里文件的方法生成对象
  13.     ......和之前的使用方式一样


另外网上看到另一片博客:http://keenwon.com/1304.html的方法,暂时没试成功,待试




本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号