Tengo el siguiente código Node.js:
var express = require('express');
var app = express.createServer(express.logger());
app.use(express.bodyParser());
app.post('/', function(request, response) {
response.write(request.body.user);
response.end();
});
Ahora si publico algo como:
curl -d user=Someone -H Accept:application/json --url http://localhost:5000
Me pongo Someonecomo se esperaba. Ahora, ¿qué pasa si quiero obtener el cuerpo completo de la solicitud? Intenté hacerlo, response.write(request.body)pero Node.js arroja una excepción que dice "el primer argumento debe ser una cadena o Buffer " y luego pasa a un "bucle infinito" con una excepción que dice " No se pueden establecer encabezados después de que se envían "; Esto también es cierto incluso si lo hice var reqBody = request.body;y luego escribir response.write(reqBody).
¿Cuál es el problema aquí?
Además, ¿puedo obtener la solicitud sin procesar sin usar express.bodyParser()?
javascript
node.js
express
El cielo azul
fuente
fuente

response.write(reqBody); cuando uso lasresponse.send(reqBody)cosas funcionan bien ... y sí, usoresponse.enddespuésresponse.write.Respuestas:
Express 4.0 y superior:
$ npm install --save body-parserY luego en su aplicación de nodo:
Express 3.0 y abajo:
Intente pasar esto en su llamada cURL:
--header "Content-Type: application/json"y asegurándose de que sus datos estén en formato JSON:
{"user":"someone"}Además, puede usar console.dir en su código node.js para ver los datos dentro del objeto como en el siguiente ejemplo:
Esta otra pregunta también podría ayudar: ¿Cómo recibir JSON en la solicitud POST express node.js?
Si no desea utilizar bodyParser, consulte esta otra pregunta: https://stackoverflow.com/a/9920700/446681
fuente
curl -d {"user":"Someone"} -H "Content-Type: application/json" --url http://localhost:5000pero me estaba dando el error " Token inesperado u ", por eso cambié a la llamada mencionada en mi publicación original.express.bodyParser()está en desuso en Express 4.x. Utilice npmjs.org/package/body-parser en su lugar.echo any"thing". Los datos que está publicando deben estar entre comillas para evitar que esto suceda.A partir de express v4.16 no hay necesidad de requerir ningún módulo adicional, solo use el middleware JSON incorporado :
Me gusta esto:
Nota:
body-parserde esto depende, ya está incluido con express.Tampoco olvides enviar el encabezado
Content-Type: application/jsonfuente
A partir de Express 4, el siguiente código parece hacer el truco. Tenga en cuenta que deberá instalar
body-parserusandonpm.fuente
app.use(bodyParser.json())app.use(bodyParser.urlencoded({ extended: true })está también requiere? Estoy publicando un documento bastante complejo como JSON en la solicitud, yextended: falseno funcionó. Solo cuando lo configuro en verdadero, la solicitud se analiza correctamente.app.use(bodyParser.urlencoded({ extended: true }));ANDapp.use(bodyParser.json())para obtener datos json en una configuración de servidor AWS Linux con NodeJS y Express.Esto te ayudara. Supongo que está enviando el cuerpo en json.
fuente
Para 2019, no necesita instalar
body-parser.Puedes usar:
fuente
Esto puede lograrse sin
body-parserla dependencia, así, escucharrequest:datayrequest:endy devolver la respuesta en el extremo de la solicitud, se refieren a continuación ejemplo de código. ref: https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/#request-bodyfuente
Prueba esto:
Eso tomará el objeto que
bodyParserha creado para usted y lo convertirá en una cadena y lo escribirá en la respuesta. Si desea el cuerpo exacto de la solicitud (con el mismo espacio en blanco, etc.), necesitarádatayendescuchas adjuntos a la solicitud antes y acumulará la cadena fragmento por fragmento como puede ver en el código fuente de análisis json de connect .fuente
Lo que dice haber "intentado hacer" es exactamente lo que escribió en el código que funciona "como se esperaba" cuando lo invoca con curl.
El error que está recibiendo no parece estar relacionado con ninguno de los códigos que nos ha mostrado.
Si desea obtener la solicitud de prima, manipuladores en el set
requestpara lasdatayendlos acontecimientos (y, por supuesto, eliminar las invocaciones deexpress.bodyParser()). Tenga en cuenta que losdataeventos ocurrirán en fragmentos, y que a menos que establezca una codificación para eldataevento, esos fragmentos serán buffers, no cadenas.fuente
request.bodyy norequest.body.user, y lo corregí ahora. Por cierto,var reqBody = request.body;era correcto y sigue siendo correcto, y cuando lo pruebes obtendrás el error que estoy recibiendo. De todos modos, ¿puede dar un ejemplo sobre cómo configurar el controladorrequest; Parece que no lo encuentro en la guía express.Si eres lo suficientemente flojo como para leer fragmentos de datos de publicaciones. simplemente puede pegar debajo de las líneas para leer json.
A continuación se muestra para TypeScript que también se puede hacer para JS.
app.ts
En uno de sus controladores que recibe llamadas POST, use como se muestra a continuación
userController.ts
fuente
Soy absolutamente nuevo en JS y ES, pero lo que parece funcionar para mí es solo esto:
¡Avísame si hay algo malo en ello!
fuente
Instale Body Parser con el siguiente comando
Configurar Body Parser
fuente
Utiliza el siguiente código para registrar datos de publicación:
fuente