Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

118
Vistas
Compruebe si req.param.dogid / req.param.dogname en Express Mongoose

Tengo 2 funciones GET en el mismo archivo.

uno para dogid y el otro para dogname.

 //Operations for api/dogs/{dogId} route //get operation router.get('/:dogId', async (req,res)=>{ try{ const dog = await Dogs.findById(req.params.dogId); res.json(dog); }catch(error){ res.json({message:error}); } })

Y

 //Operations for api/dogs/{dogName} route //get operation router.get('/:dogName', async (req,res)=>{ try{ const dog = await Dogs.find({'name': { $in: req.params.dogName}}) res.json(dog); }catch(error){ res.json({message:error}); } })

Cuando intento npm start no da ningún problema.

Pero en Postman cuando envío la operación GET para http://localhost:3000/api/dogs/Sasha

entonces muestra lo siguiente:

 { "message": { "stringValue": "\"Sasha\"", "valueType": "string", "kind": "ObjectId", "value": "Sasha", "path": "_id", "reason": {}, "name": "CastError", "message": "Cast to ObjectId failed for value \"Sasha\" (type string) at path \"_id\" for model \"Doggies\"" } }

El código para obtener los datos con dogname ya está presente. Pero dado que la función get para la ruta dogid se escribe antes que la ruta dogname, muestra este error.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

El problema es que GET api/dogs/:dogId está manejando la solicitud ya que está escrita antes de GET api/dogs/:dogname.

Para resolver este problema, intente cambiar el diseño de su API o use diferentes métodos de solicitud HTTP. Por ejemplo :

 POST api/dogs/:dogId GET api/dogs/:dogName or GET api/animals/dogs/:dogId GET api/dogs/:dogName

Pero no hagas esto:

 GET api/dogs/:dogId GET api/dogs/:dogName
over 4 years ago · Santiago Trujillo Denunciar

0

Como @Mohammad Ismail ya señaló, debe usar un método HTTP diferente para diferenciar entre 2 rutas.

Hay otro enfoque que consiste en utilizar query en lugar de param
Envías la solicitud como localhost:3000/api/dog?dogName=abc
Luego, en su código: req.query.dogName obtendrá el valor abc

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda