以下は、node.js からプロトコル バッファを解析しようとするコードです。Python では動作しますが、node.js では問題が発生しているようです。私の大きな懸念は、1) ペイロードを正しく取得していますか? および2)ペイロードを正しく解析するためにプロトコルバッファを使用していますか。
コンソールにログインすると、ペイロードは sys なので、リクエストからの prot バッファであると想定しています。次に、次のように呼び出してバッファを解析します。
bid_request.parse(payload);
コード スニペットとエラーは次のとおりです。
var buffertools = require('buffertools');
var Schema = require('protobuf').Schema;
var schema = new Schema(fs.readFileSync('/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/test.desc'));
app.post('/n/test', function(req, res){
var payload = [];
req.on('data', function (data) {
payload.push(data);
});
console.log(payload);
req.on('end', function () {
var payload = buffertools.concat.apply(null, payload);
console.log(payload);
console.log('--------------');
var bid_request = schema['BidRequest'];
var brr_fu = bid_request.parse(payload);
// rest of code here
});
});
libprotobuf ERROR google/protobuf/message_lite.cc:123] Can't parse message of type "BidRequest" because it is missing required fields: id
undefined:1
urn f.call(self,
^
Error: Malformed message
at Function.parse (unknown source)
at IncomingMessage.<anonymous> (/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/bidder.js:80:31)
at IncomingMessage.emit (events.js:64:17)
at HTTPParser.parserOnMessageComplete [as onMessageComplete] (http.js:130:23)
at Socket.ondata (http.js:1506:22)
at TCP.onread (net.js:374:27)
なぜペイロードが<SlowBuffer>