Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

171
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda