2016-08-01 21 views
0

Meine App-Code wie folgt aussieht:Protocol Buffer Datencodierung

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; 
} 

Wenn ich diese Seiten besuchen, erhalte ich Antworten wie:

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

Frage:

Warum in 2 und 3 Beispiel i Daten sehen, wie es ist, nicht ecoded (trotz der Tatsache, dass ich kodieren() verwendet und toBuffer() Funktionen)?

+0

Die codierte Form Ihrer Nachricht sollte (glaube ich) sein: '\ 012 \ 004name \ 022 \ 003123' Ist es möglich, dass Buffer.toString() löscht '\ 012',' \ 004', '\ 022',' \ 003' für Anzeigezwecke? '\ 012' ist' \ n', aber die anderen haben keine druckbare Form. –

Antwort

0

Auf 3 Sie sind toBuffer auf plr using, ich denke, Sie wollten es auf enc tun.

Dies sollten Sie die codierten Daten geben:

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