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

113
Vistas
encontrar el usuario de la base de datos por cualquier campo pasado en params

Estoy tratando de encontrar usuarios en la base de datos en función de cualquiera de los tres campos. en cartero tengo los siguientes caminos

http://localhost:8082/api/users/617473029f80eda3643a7fdd

http://localhost:8082/api/users/Michael

http://localhost:8082/api/users/25

actualmente en mi base de datos tengo todos esos valores para diferentes usuarios. Entonces, la idea es que la ruta 1 devuelva al usuario con esa identificación, la ruta 2 devuelva al usuario con ese nombre y la ruta 3 al usuario con esa edad. Para tu información: estoy probando esto, por lo que a partir de ahora esos valores de campo son únicos y no hay repeticiones en los campos de la base de datos.

con el siguiente código, lo único que regresa es cuando paso el id, pero regresa toda la base de datos. Nada vuelve cuando paso en nombre o edad

 router.get('/:id', (req, res) => { User.find( { $or: [ {"_id": req.params.id}, {"name": req.params.name}, {"age": req.params.age} ]}) .then(user => res.json(user)) .catch(err => res.status(404).json({nouserfound: '***NoUserFound***'})) });

¡Gracias!

EDITAR: Lo siguiente funcionó para mí

 router.get('/:id', (req, res) => { User.find({$or: [ {name: req.params.id}, {age: req.params.id} ]}) .then(user => res.json(user)) .catch(err => res.status(404).json({nouserfound: '*** No User Found ***'})); });

El único problema es que no detecta el error, por lo que al probar en cartero cualquier cosa que envíe que no coincida, solo devuelve una matriz vacía en lugar del error. No estoy seguro de cómo afectará esto al programa en sí o si está bien

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

req.params.name o req.params.age no estarán definidos porque el parámetro de ruta es req.params.id . Para que funcione correctamente, deberá buscar el valor solo por este parámetro de ruta. Los nombres de los campos cambian, pero el valor - req.params.id sigue siendo el mismo.

 User.find( { $or: [ {"_id": req.params.id}, {"name": req.params.id}, {"age": req.params.id} ]}) .then(user => res.json(user)) .catch(err => res.status(404).json({nouserfound: '***NoUserFound***'}))

Opcionalmente: para uso futuro, cambiar el nombre de id a slug sería una mejor opción, ya que esto va bien con todos los demás campos en su esquema.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Así es como mongodb devuelve los resultados cuando pasa undefined/null que trata como find({}) .

Debe verificar si existe el name / age . Estoy bastante seguro de que esta ruta no usará nombre/edad, sino que solo usa _id , entonces, ¿por qué no solo pasa _id ?

 router.get('/:id', (req, res) => { // check what is available in req.params - name/age/id // based on it create query and run it User.find({"_id": req.params.id}) .then(user => res.json(user)) .catch(err => res.status(404).json({nouserfound: '***NoUserFound***'})) });

Deberías revisar este enlace.

about 4 years ago · Juan Pablo Isaza Denunciar

0

No puede establecer nombres diferentes para cada parámetro de solicitud, por lo que req.params.id debe ser solo una identificación y no estará disponible a través del nombre req.params.name

Intente enviar la solicitud archivada a través de parámetros de consulta, podría hacerlo más fácil. Mantendría el punto final :id , solo una forma común de solicitar un usuario por identificación, y crearía otro punto final para todas las demás solicitudes.

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