协议缓冲区数据编码

时间:2016-08-01 22:26:40

标签: node.js express protocol-buffers

我的应用代码如下:

main.js

const express = require('express');
const app = express();
const ProtoBuf = require("protobufjs");
let builder = ProtoBuf.loadProtoFile("protos/player.proto")
let Main = builder.build("Main")
let Player = Main.PlayerInfo

app.get('/test1', function (req, res) {
  let plr = new Player("name", "123")
  let enc = plr.encode()
  res.send(`Message is: ${enc}`); // Response 'Message is: ByteBufferNB(offset=0,markedOffset=-1,limit=11,capacity=16)'

});
app.get('/test2', function (req, res) {
  let plr = new Player("name", "123")
  let enc = plr.encode()
  res.send(`Message is: ${enc.toBuffer()}`); // Response 'Message is: name123'

});
app.get('/test3', function (req, res) {
  let plr = new Player("name", "123")
  let enc = plr.encode()
  res.send(`Message is: ${plr.toBuffer()}`); // Response 'Message is: name123'

});

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

player.proto

syntax = "proto3";

package Main;

message PlayerInfo {
  required string username = 1;
  required string password = 2; 
}

当我访问这些页面时,我得到的反应如下:

/test1 - Message is: ByteBufferNB(offset=0,markedOffset=-1,limit=11,capacity=16)
/test2 - Message is: name123
/test3 - Message is: name123

问题:

为什么在2和3示例中,我看到的数据不是生成的(尽管我使用的是encode()和toBuffer()函数)?

1 个答案:

答案 0 :(得分:0)

在3上,您在toBuffer上使用plr,我想您打算在enc上进行操作。

这应该为您提供编码数据:

res.send(plr.encode().toBuffer(), (err, data) => {
    console.log(data);
});