Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

212
Vistas
usando express.json() después de raw-body

En mi aplicación Express, quiero verificar la longitud del cuerpo y limitarla independientemente del tipo de contenido. Después de esto, quiero analizar el cuerpo si el tipo de contenido es json. ¿Cómo puedo conseguir esto? Por el momento, mi código es como el siguiente, pero el servidor se detiene en el middleware express.json():

 const express = require('express') const contentType = require('content-type') const getRawBody = require('raw-body') const app = express() app.use(function(req, res, next) { const cType = req.headers['content-type'] || '' getRawBody(req, { length: req.headers['content-length'], limit: '1mb', encoding: contentType.parse(cType).parameters.charset }, function(err, string) { if(err) { next(err) } next() }) }) app.use(express.json())
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

No puedes implementar las cosas de esa manera. express.json() espera leer el contenido del cuerpo del flujo entrante. Pero, raw-body ya ha leído el contenido del cuerpo de la secuencia, por lo que cuando express.json() intenta leerlo, se atasca esperando que haya algo para leer.

Dado que express.json() hace dos cosas, lee el cuerpo de la transmisión y luego lo analiza en JSON, debería ser fácil reemplazar esas dos cosas con su propia versión. El primero ya está hecho (leer el cuerpo), por lo que todo lo que tiene que hacer es llamar a JSON.parse() en el contenido del cuerpo sin procesar que ya leyó si (y solo si), el tipo de contenido es "application/json" . Elimina la llamada a express.json() :

 app.use(function(req, res, next) { const cType = req.headers['content-type'] || '' getRawBody(req, { length: req.headers['content-length'], limit: '1mb', encoding: contentType.parse(cType).parameters.charset }, function(err, string) { if(err) { next(err) } else { if (req.get('Content-Type').toLowerCase() === "application/json") { try { // try parsing the body as JSON req.body = JSON.parse(req.body); next(); } catch(e) { console.log(e); next(e); } } else { // not JSON, will leave the raw body in req.body next(); } } }) })

Tenga en cuenta que si su aplicación espera otros tipos de contenido (como datos de formulario), también tendrá que analizarlos manualmente, ya que el middleware express estándar para esos otros tipos tendrá el mismo problema.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda