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

168
Vistas
Nodo JS req.cuerpo indefinido

He revisado bastantes otras publicaciones y estoy muy perdido con esto.

Puedo ejecutar un console.log(req) y obtener el siguiente resultado

 ServerResponse { ... req: IncomingMessage { ... url: '/my-endpoint', method: 'POST', statusCode: null, statusMessage: null, ... body: { foo: 'bar' }, _body: true, ... route: Route { path: '/my-endpoint', stack: [Object], methods: [Object] } }, ...

Parece sólido, por lo que esperaría hacer console.log(req.body) y obtener { foo: 'bar' } de nuevo en la consola... pero no, quedando indefinido

Después de investigar, descubrí que puede ser algo con mi archivo app.js y específicamente con un body-parser , sin embargo, ya tengo todo eso.

 var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var http = require('http'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'pug'); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); //Home Page Rendering var index = require('./routes/index'); app.use('/', index); // All other routes are kept in the `routes` module require('./routes')(app); module.exports = app;

routes.js

 module.exports = function routing(app) { var apiClient = require('./services/apiClient'); app.post('/get-device-info', function(err, req, res){ console.log("/get-device-info routes"); apiClient(req, res); }); };

apiClient.js

 module.exports = function callApi(req, res){ console.log(req); console.log(req.body) };

index.js

 var express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); module.exports = router;

Esto es lo que he probado

app.use(express.bodyParser());

Asegurarse de que la solicitud entrante declare explícitamente application/json

Declarar body parser.json de otras maneras

Agregar una función de configuración

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Su problema es que Express no usa las primeras devoluciones de llamada de error para sus controladores de ruta. El siguiente código no funcionará porque el controlador app.post no tiene la firma (req, res) => {} . En el siguiente código, err es igual a req , req es igual a res y res es igual a next .

 // routes.js module.exports = function routing(app) { var apiClient = require('./services/apiClient'); app.post('/get-device-info', function(err, req, res){ console.log("/get-device-info routes"); // Assuming the request is correct // the value of body will be the request body console.log(res.body) apiClient(req, res); }); };`

Hay 3 firmas de devolución de llamada de ruta diferentes que puede usar en Express

  • (req, res) => {} - Este es el más básico y define una ruta que solo se preocupa por la solicitud y la respuesta.
  • (req, res, next) => {} - Esta es una firma de devolución de llamada de middleware que parece una devolución de llamada de ruta básica, pero también asigna el next objeto que le dice a Express que llame a la siguiente ruta coincidente.
  • (err, req, res, next) => {} : esta es la devolución de llamada de ruta de manejo de errores y solo necesita 1 por Express Router Middleware o Express App. Se llama si se llama a next(err) dentro de una ruta o un middleware. Más específicamente, si next() no se llama con una cadena o nada, omitirá todo el Middleware y las rutas restantes e irá directamente al controlador de errores. Puede leer más sobre esto en Express Docs

Deberá cambiar la definición de la ruta a

 app.post('/get-device-info', (req, res) => { apiClient(req, res) })

O incluso podrías hacer esto

 module.exports = app => { let apiClient = require('./services/apiClient') app.post('/get-device-info', apiClient) }
about 4 years ago · Santiago Trujillo Denunciar

0

Prueba esto, ya que funcionó para mí.

Primero declare app y luego bodyParser , ya que bodyParser se usa dentro de app :

 const app = express(); const bodyParser = require('body-parser');

Entonces tenga estas líneas a continuación:

 app.use(bodyParser.json()) app.use(bodyParser.urlencoded({extended: true}))
about 4 years ago · Santiago Trujillo 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