Nodejs中使用Protobuf的.proto文件

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

以下是Nodejs的:

zzz.proto文件:
package zzz;
option optimize_for = LITE_RUNTIME;
message Account{
    required string accountName = 1; //帐号名
    required string pwd = 2; //帐号密码
}
message AccountList{
    required int32 index = 1;
    repeated Account list = 2;
}


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


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


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


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




猜你喜欢

转载自blog.csdn.net/u013052238/article/details/81010794
今日推荐