req node data body node.js post express request

node.js - node - no req.body enviado en solicitudes POST



req.body node js (1)

Después de leer muchos hilos similares, no pude ver el motivo de mi problema ...

Estoy intentando aprender cómo crear una API RESTful con node y express 4, bastante simple y básica, pero cuando intento guardar mi documento con una solicitud POST, no se envía req.body a la solicitud y tengo algunos problemas.

Veamos un pequeño fragmento de código:

module.exports = (router, Bear) -> router.route ''/bears'' .get (req, res) -> Bear.find (err, bears) -> if err then err else res.json bears .post (req, res) -> newBear = _id: req.body.bearId nombre: req.body.nombre bear = new Bear(newBear) bear.save (err) -> if err then res.send err # res.json msg: "#{bear.nombre}, creado" res.json msg: "created"

Hasta ahora, esta es mi configuración básica de rutas (por ahora). El servidor es:

express = require ''express'' app = express() morgan = require ''morgan'' bodyParser = require ''body-parser'' mongoose = require ''mongoose'' app.use bodyParser.urlencoded extended: true app.use bodyParser.json() app.use morgan ''dev'' require(''./app/config/js/database'')(mongoose) router = express.Router() Bear = require ''./app/models/js/bear'' router.get ''/'', (req, res) -> res.json msg: ''It works'' require(''./app/routes/js/bears'')(router, Bear) app.use ''/api'', router port = 8080 app.listen(port) console.log("Corriendo en #{port}")

Y las otras piezas de código no son relevantes aquí (creo), entonces, cuando envío una solicitud usando cartero, o CURL, siempre recibo una respuesta {} y un mensaje de bloqueo en mi servidor:

home/nano/Dev/bears/node_modules/mongoose/lib/utils.js:413 throw err; ^ Error: Can''t set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (http.js:689:11) at ServerResponse.header (/home/nano/Dev/bears/node_modules/express/lib/response.js:662:10) at ServerResponse.send (/home/nano/Dev/bears/node_modules/express/lib/response.js:146:12) at ServerResponse.json (/home/nano/Dev/bears/node_modules/express/lib/response.js:235:15) at Promise.<anonymous> (/home/nano/Dev/bears/app/routes/js/bears.js:22:20) at Promise.<anonymous> (/home/nano/Dev/bears/node_modules/mongoose/node_modules/mpromise/lib/promise.js:172:8) at Promise.emit (events.js:95:17) at Promise.emit (/home/nano/Dev/bears/node_modules/mongoose/node_modules/mpromise/lib/promise.js:84:38) at Promise.reject (/home/nano/Dev/bears/node_modules/mongoose/node_modules/mpromise/lib/promise.js:111:15) at Promise.error (/home/nano/Dev/bears/node_modules/mongoose/lib/promise.js:95:15)

Realmente no tengo idea de que realmente no tengo idea de qué hacer, tengo toda la tarde y la noche en esto.

Bien, realizo los cambios en el código y ahora el rastreo desapareció pero la solicitud aún está vacía.

module.exports = (router, Bear) -> router.route ''/bears'' .get (req, res) -> Bear.find (err, bears) -> if err then return res.send err res.json bears .post (req, res) -> newBear = _id: req.body.bearId nombre: req.body.nombre bear = new Bear(newBear) bear.save (err) -> if err then return res.send err res.json msg: "created"

El código JS:

(function() { module.exports = function(router, Bear) { return router.route(''/bears'').get(function(req, res) { return Bear.find(function(err, bears) { if (err) { return res.send(err); } return res.json(bears); }); }).post(function(req, res) { var bear, newBear; newBear = { _id: req.body.bearId, nombre: req.body.nombre }; bear = new Bear(newBear); return bear.save(function(err) { if (err) { return res.send(err); } return res.json({ msg: "created" }); }); }); }; }).call(this);

Estoy enviando la solicitud a través de RESTClient para Firefox, Curl, Postman ... el encabezado del tipo de contenido es Content-Type: application/json; charset=utf-8 Content-Type: application/json; charset=utf-8


Si comentas:

Bear = require ''./app/models/js/bear''

y reemplazar:

require(''./app/routes/js/bears'')(router, Bear)

con:

router.post "/bears", (req, res, next) -> console.log req.body res.json req.body return

verás que viene el cuerpo req.

Como se mencionó en los comentarios, falta una declaración de devolución en su archivo de ruta bears.coffee . Necesita cambiar la línea 12 para que se lea:

if err then return res.send err

Asegúrese de estar enviando sus parámetros en el cuerpo de la solicitud. Para curl debes usar:

curl -X POST -d "bearId=1221&nombre=papa" http://localhost:8080/api/bears

Para Postman, asegúrese de elegir POST del menú desplegable y haga clic en x-www-form-urlencoded y coloque sus parámetros en los campos "Clave" y "Valor", respectivamente.