¿Qué es express.raw()?
El middleware express.raw() es una herramienta nativa de Express diseñada para procesar cuerpos de sloicitud con el tipo de contenido application/octet-stream. A diferencia de otros analizadores, este middleware captura los datos crudos y los asigna a la propiedad req.body como un objeto Buffer.
Es particularmente útil cuando tu servidor necesita gestionar transmisiones de bytes, archivos cargados manualmente o datos binarios personalizados, evitando cualquier tipo de transformación de cadena innecesaria.
Implementación básica
Al ser parte del paquete principal de Express (desde la versión 4.16.0), no requiere dependencias adicionales.
Configuración global
const express = require('express');
const app = express();
app.use(express.raw());
app.post('/procesar-binario', (req, res) => {
if (Buffer.isBuffer(req.body)) {
console.log(`Tamaño recibido: ${req.body.length} bytes`);
res.status(200).send('Binario procesado exitosamente');
} else {
res.status(400).send('No se recibió un flujo binario válido');
}
});
Parámetros de personalización
Puedes refinar el comportamiento del middleware pasando un objeto de configuración:
- inflate: Booleano que permite la descompresión automática de cuerpos comprimidos con Gzip o Deflate.
- limit: Controla el peso máximo permitido para la solicitud (ej.
'2mb'o2048). Previene ataques de agotamiento de memoria. - type: Define el encabezado
Content-Typeque disparará el procesamiento. Puede ser un string, un arreglo o una expresión regular (ej./^application\/pdf$/). - verify: Una función de validación que se ejecuta antes de asignar el dato a
req.body, útil para verificar firmas o integridad de datos.
app.use(express.raw({
limit: '5mb',
type: 'application/octet-stream',
verify: (req, res, buf) => {
if (buf.length === 0) throw new Error('El flujo está vacío');
}
}));
Caso de uso: Gestión de archivos binarios
Un uso frecuente es la escritura directa de flujos binarios en el sistema de archvios del servidor:
const fs = require('fs');
app.post('/guardar-dato', (req, res) => {
const rutaDestino = './archivos/data.bin';
fs.writeFile(rutaDestino, req.body, (err) => {
if (err) return res.sendStatus(500);
res.send('Archivo guardado');
});
});
Diferencias frente a otros middlewares
Es vital no confundir express.raw() con sus contrapartes:
express.json(): Transforma JSON en un objeto JavaScript.express.urlencoded(): Procesa datos provenientes de formularios HTML.express.text(): Maneja el cuerpo como una cadena de texto sin procesar.express.raw(): Mantiene la integridad del dato comoBuffer.
Solución de problemas comunes
- req.body es undefined: Verifica si el encabezado
Content-Typede tu cliente coincide con la configuración del middleware. - 413 Payload Too Large: El cliente excedió el límite definido en la configuración
limit. - 415 Unsupported Media Type: El servidor recibió un tipo de dato que no coincide con las reglas de
typeconfiguradas.