2016-08-01 1 views
0

Мое приложение код выглядит следующим образом:кодирования данных Protocol Buffer

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 примера я вижу данные, как это, не ecoded (несмотря на то, что я с помощью кодирования() и toBuffer() функции)?

+0

Кодированная форма вашего сообщения должно быть (я думаю): '\ 012 \ 004name \ 022 \ 003123' Возможно ли, что Buffer.toString() вырезает '\ 012',' \ 004', '\ 022',' \ 003' для отображения? '\ 012' -' \ n', но остальные не имеют пригодной для печати формы. –

ответ

0

На 3 вы используете toBuffer на plr, я думаю, вы хотели сделать это на enc.

Это должно дать вам закодированную данные:

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