Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

216
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!