Hay un problema en application/octet-stream al enviar la solicitud al servidor node.js. El cuerpo de la solicitud está vacío {} en el servidor.
¿Por qué el servidor toma un cuerpo de solicitud vacío? ¿y por qué se perdió?
async function postData(url = '', data) { console.log('data', data); const response = await fetch(url, { method: 'POST', mode: 'cors', cache: 'no-cache', credentials: 'same-origin', headers: { 'Content-Type': 'application/octet-stream', 'Content-Disposition': 'attachment' }, redirect: 'follow', referrerPolicy: 'no-referrer', body: data }); return response; //.arrayBuffer(); } postData('http://localhost:3600/buffer', arrU8) .then(data => { console.log(data); }); arrU8 es un Uint8Array por longitud: 33411528
Express.js se utiliza como biblioteca estándar. Esta API es muy simple y solo quiero devolver el cuerpo de la solicitud como respuesta sin ningún procesamiento en el cuerpo.
exports.buffer = (req, res) => { console.log(req); res.status(201).send(req.body); }; {}Ha aclarado que está usando Express.js y no está usando ningún middleware.
Tiene que usar middleware para llenar req.body en Express.js. De la documentación :
req.bodyContiene pares clave-valor de datos enviados en el cuerpo de la solicitud. De forma predeterminada, no está
undefinedy se completa cuando usa un middleware de análisis del cuerpo, comoexpress.json()oexpress.urlencoded().
(mi énfasis)
Así que tu código básicamente está haciendo .send(undefined) .
Si no desea utilizar middleware por alguna razón, Express.js Request es una versión aumentada del IncomingMessage incorporado de Node.js, por lo que puede usar esos métodos para leer los datos como (digamos) un Buffer o similar si usted quiere.
Después de inspeccionar el módulo analizador de cuerpo, encuentra que hay estos scripts:
json.js raw.js text.js urlencoded.jsEs probable que cada uno coincida con tipos MIME específicos. Para application/octet-stream, debe utilizar raw.js. Para hacerlo, al inicializar su aplicación express, debe escribir:
app.use(require("body-parser").raw());Esto inicializará el middleware que establece ese atributo req.body, cuando el tipo de contenido es "aplicación/flujo de octetos". Dado que req.body no existe inicialmente en el objeto req, algo debe configurarlo. Ese algo tiende a ser alguna(s) función(es) en el middleware, o si lo sabe, podría hacerlo usted mismo (eso implica mirar los encabezados de solicitud y analizar la secuencia).
Para obtener acceso directo al flujo de bytes de la solicitud (y al inspeccionar el código fuente del módulo), encontrará que se está leyendo un flujo de:
let stream = zlib.createInflate(); req.pipe(stream);o
let stream = zlib.createGunzip(); req.pipe(stream);Debo decir que yo mismo no entiendo los detalles de la secuencia o el objeto req más allá de esto.