Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

274
Visualizações
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.

about 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

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).

about 4 years ago · Santiago Trujillo Relatório

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?

about 4 years ago · Santiago Trujillo Relatório

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); })
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda