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

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

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 Report

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 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!