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

259
Vistas
req.body está vacío, ¿por qué?

Quiero enviar algunos datos a mi base de datos MongoDB, pero en router.post mi req.body está vacío, si uso cosas que puse en mi función de envío en User(req.body) en lugar de req.body data a mi base de datos MongoDB correctamente.

Este es mi enrutador que uso, router.get . funciona bien, devuelve las tablas de la base de datos correctamente en la página /api :

 const router = require("express").Router(); const User = require("./model/models"); const parser = require("body-parser").json(); router.get("/", async (req, res) => { const data = await User.find({}); res.json(data); }); router.post("/",parser,async (req, res) => { console.log('1') console.log(req.body) console.log('2') parser.v await User(req.body).save(); res.json({"msg": "ok"}); }); module.exports = router

Este es mi código de archivo index.js :

 const bodyParser = require('body-parser'); const express = require('express'); const app = express(); const parser = require("body-parser").json(); var path = require('path'); app.use(express.urlencoded(true)); app.use(express.json()); app.use(parser); app.use('/',require("./routes/routes")) app.use(express.static(__dirname +'/public')) app.use("/api", require('./data/api')) app.listen(5000,function(){ console.log('server is alive') })

Esta es la función que uso para enviar datos:

 const btn1 = document.getElementById('btnEnter') let Login = "123" btn1.addEventListener('click' ,e=>{ send({newsTxT : "someTextHere",newsZag:"someZag",author:"SomeAuthor"}) }) const send = async(body) => { let res = await fetch("/api", { method: "post", header: { "Content-Type": "application/json", "Accept": "application/json" }, body: JSON.stringify(body) }); let data = await res.json(); console.log(data) }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Lo siguiente funcionó bien:

 const express = require("express") const app = express() const router = express.Router() router.use(express.json()) app.use(router) router.post('/api/user', function(req, res) { // ... }

Veo que la diferencia puede estar usando: app.use(router)

Tenga en cuenta que en el código anterior la declaración:

 router.use(express.json())

se puede reemplazar con (usando el body-parser ):

 const bodyParser = require('body-parser') router.use(bodyParser.json())

Esto funcionó bien con la versión express 4.17.1, body-parser versión 1.19.0 y NodeJS versión 12.18.3

about 4 years ago · Juan Pablo Isaza Denunciar

0

Lo único extraño que veo es que está utilizando un json body-parser y también express.json() ambos técnicamente hacen lo mismo, pero body-parser está obsoleto, por lo que podría estar causando un error.

Además, no tiene que volver a importarlo en las rutas, colocar app.use(express.json()) en index.js hará que funcione para todos los puntos finales/rutas.

Vea cómo va este refactor:

 const router = require('express').Router() const User = require('./model/models') router.get('/', async (req, res) => { const data = await User.find({}) res.json(data) }) router.post('/', async (req, res) => { console.log('1') console.log(req.body) console.log('2') await User(req.body).save() res.json({ 'msg': 'ok' }) }) module.exports = router

índice.js

 const express = require('express') const app = express() var path = require('path') app.use(express.urlencoded(true)) app.use(express.json()) app.use('/', require('./routes/routes')) app.use(express.static(__dirname + '/public')) app.use('/api', require('./data/api')) app.listen(5000, function () { console.log('server is alive') })
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