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

110
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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