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

296
Views
En mi servidor de JavaScript, ¿por qué mis datos publicados tienen llaves y comillas alrededor?

Tengo un servidor JavaScript simple para procesar un comando POST. Pero los datos de mi publicación aparecen rodeados de llaves y comillas. Estoy usando curl para enviar esto:

curl --data {title:'Odessey',author:'Homer'} localhost:4444/test/add

Pero mi servidor obtiene los datos publicados así:

{ "{title:'Odessey',author:'Homer'}": '' }

Cuando lo devuelvo al cliente, aparece con espacios eliminados y comillas convertidas:

{"{title:'Odessey',author:'Homer'}":""}

Curiosamente, si pongo comillas alrededor de la cadena en curl, obtengo exactamente lo mismo:

curl --data "{title:'Odessey',author:'Homer'}" localhost:4444/test/add

Estoy ejecutando esto en Windows 10. El problema no parece estar relacionado con curl, porque escribí otro servidor (más torpe) sin usar express, y este problema no apareció. Además, probé las otras opciones de curl para enviar datos, como --data.ascii y --data.raw , pero ninguna me ayudó. Entonces el problema debe estar en el servidor express.

Además, registro el tipo de contenido de la solicitud antes de procesar los DATOS POST. De forma predeterminada, imprime application/x-www-form-urlencoded . Por sugerencia de otros usuarios, cambié el encabezado Content-Type en la instrucción curl diciendo curl -H Content-Type:application/json , pero eso no ayudó. La declaración de registro confirma que recibió este encabezado, pero luego no puede leer los datos en absoluto, registrando req.body: {} .

Aquí está mi código de servidor:

 const express = require('express'); const app = express(); // taking this block out doesn't help. Without it, I don't get any data. app.use( express.urlencoded({ extended: true }) ); // Changing this to express.text() doesn't help. Nor does removing it. app.use(express.json()); app.post('/test/add', (req, res) => { let hdr = "Content-Type"; console.log(hdr, req.header(hdr)); console.log("req.body:", req.body); res.send(req.body); }) var server = app.listen(4444, function() { var urlStr = "http://" + host + ':' + port; console.log ("Example app listeneing at", urlStr); })

Nota: he actualizado esto ligeramente desde que lo publiqué por primera vez.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Debería poder hacer esto agregando el siguiente encabezado: -H 'Content-Type: application/json' . Lo recibe como un parámetro GET (algo así como localhost:4444/test/add?{title:'Odessey',author:'Homer'} ).

about 4 years ago · Juan Pablo Isaza Report

0

Mario Martín Moreno tuvo una sugerencia muy útil para agregar una opción -H a mi comando curl. Esto era correcto, pero la forma no era del todo correcta. @dandavis tenía razón en que solo las comillas dobles eran válidas para las claves. Y @tevemader tenía razón en que estaba usando un archivo de encabezado de forma incorrecta. Pero el detalle crucial fue que necesitaba escapar de mis caracteres de cita con una barra invertida. Así que la línea de rizo completa se veía así:

curl --data {\"title\":\"Odessey\",\"author\":\"Homer\"} -H Content-Type:application/json localhost:4444/test/add

Advertencias: las comillas simples no funcionan incluso solo con los valores, e incluso con la barra invertida para escapar de ellos. Y todavía no sé por qué necesitaba hacer esto aquí, pero no con mi servidor anterior que no usaba express. Pero al menos sé cómo usar curl para enviar mis datos. Gracias a todos los que respondieron con sugerencias útiles.

about 4 years ago · Juan Pablo Isaza 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!