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

280
Views
La ruta Express GET no funcionará con parámetros

Soy nuevo en Express y Mongoose. Actualmente estoy trabajando en mi primer proyecto, que no es un tutorial, y me he encontrado con un problema.

Tengo varias rutas, están definidas en index.js así:

 app.use('/api/client',require('./routes/client')); app.use('/api/host',require('./routes/host'));

En las rutas, hay varios verbos que funcionan, como PUT y POST. Aquí está la ruta problemática (estoy tratando de hacer más de lo que se presenta aquí, pero lo que se presenta aquí no funciona tan bien):

 router.get('/ama/:id', function (req, res, next) { Ama.findById(req.params.id).then(function(Ama){ res.send(Ama); }); });

Esto debería funcionar, ¿verdad? Debería devolver el documento en la base de datos, con esa identificación. Y he comprobado si el documento existe, probablemente unas 100 veces. Ahora, si simplifico mucho la ruta, eliminando la identificación y doy una respuesta simple, la ruta funciona:

 router.get('/ama', function (req, res, next) { res.send({type:"GET"}); });

Es tan extraño, que tan pronto como agrego el parámetro, obtengo un:

 <pre>Cannot GET /api/host/ama</pre>

en Cartero.

¿Algunas ideas? Mongod se está ejecutando, mis otras rutas están funcionando.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Parece que estás intentando recuperar esta URL:

 /api/host/ama?id=SOMEID

Sin embargo, tiene una ruta declarada para las URL que se ven así:

 /api/host/ama/SOMEID

En otras palabras, la identificación es parte de la ruta de la URL y no se pasa como un parámetro de cadena de consulta (eso es lo que significa /:id : es un marcador de posición para una parte de la URL que la ruta debe coincidir).

Entonces, cambie la URL de solicitud agregando la identificación a la ruta ( /api/host/ama/58e395a8c6aaca2560089c‌​e7 ), o reescriba su controlador de ruta a algo como esto:

 router.get('/ama', function (req, res, next) { Ama.findById(req.query.id).then(function(Ama){ res.send(Ama); }); });

Sin embargo, recomendaría usar el primero (haciendo que la identificación sea parte de la URL).

over 4 years ago · Santiago Trujillo Report

0

Hay dos problemas aquí:

 router.get('/ama/:id', function (req, res, next) { Ama.findById(req.params.id).then(function(Ama){ res.send(Ama); }) res.send(req.params.id)*/ });

En primer lugar, res.send(req.params.id) se ejecutará antes que res.send(Ama); y probablemente enviará la respuesta completa. Te falta la llamada al método .exec() (ver la respuesta de Cédric De Dycker para más detalles). El res.send() solo se puede usar de manera confiable una vez. Tal vez quieras res.write() en su lugar si quieres escribir varias cosas. Además, no maneja el rechazo de la promesa, por lo que no maneja los errores de la base de datos. Para saber por qué siempre debe manejar los rechazos de promesas, consulte esta respuesta: ¿Debería abstenerme de manejar el rechazo de promesas de forma asíncrona?

over 4 years ago · Santiago Trujillo Report

0

El parámetro debería funcionar bien, pero parece que no agregó .exec a su consulta

 Ama.findById(req.params.id).exec().then(function(Ama){ res.send(Ama); })
over 4 years ago · Santiago Trujillo 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!