Я пытаюсь отправить двоичные данные в экспресс-приложение. Он отлично работает, если мои значения меньше 0x80. Если одно значение равно 0x80 или больше, оно заполняет весь буфер.nodejs/express и двоичные данные в POST
Экспресс Обработчик:
binary = require('binary');
exports.api = function(req, res){
var body = req.body.name;
var buf = new Buffer(body,'binary');
console.log('body',req.body);
console.log('req body len', body.length);
console.log('buf len', buf.length);
var g = binary.parse(buf)
.word16bu('a') // unsigned 16-bit big-endian value
.word16bu('b').vars
console.log('g.a', g.a);
console.log('g.b', g.b);
res.send("respond with a resource");
};
Python клиент (Content-Type: применение/х-WWW-форм-urlencoded):
import requests
from struct import pack
# send two unsigned shorts (16-bits each).
requests.post('http://localhost:3000/api', data={'name':pack('!HH',1,2)})
Экспресс выход, когда данные = 1,2. Это то, что я ожидал бы.
body { name: '\u0000\u0001\u0000\u0002' }
req body len 4
buf len 4
g.a 1
g.b 2
POST /api 200 1ms - 23b
Экспресс-выход, когда данные = 1,0xFF. Интересно отметить, что 9520 фактически равен 0x25 0x30 в гексагоне, что соответствует «% 0» в ASCII. Да, он, похоже, разбирает строку «% 00% 01 ...». Хотел бы я знать, как это предотвратить!
body { name: '%00%01%00%FF' }
req body len 12
buf len 12
g.a 9520
g.b 12325
POST /api 200 2ms - 23b