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

133
Visualizações
Uso de findOne y findOneAndUpdate con solicitud HTTP (mangoose)

Estoy haciendo un resto de api en el que quiero hacer solicitudes HTTP usando Postman, específicamente quiero realizar una búsqueda o actualizar un documento mongodb, pero esto debe ser por una identificación que no es la doc_id que proporciona mongo

esquema de modelos

 'use strict' const mongoose = require('mongoose') const Schema = mongoose.Schema const infoClientSchema = Schema ({ idusr: String, /*this is require*/ name: String, phone: Number, address: String, riff: String, state: String, city: String, email: {type: String} }) module.exports = mongoose.model('InfoCli',infoClientSchema)

Controlador (Este es el método get que conozco usando findById y está funcionando)

 'use strict' const InfoCli = require('../models/infoclient') function getInfoCli(req, res){ let infocliId = req.params.infocliId InfoCli.findById(infocliId, (err, infocli) =>{ if (err) return res.status(500).send({message: 'Error making request: $(err)'}) if (!infocli) return res.status(404).send({message: 'The client does not exist '}) res.status(200).send({infoclient: infocli}) }) }

Controlador (Este es el método get que pensé que funcionaría usando findOne)

 function getInfoByUsr(req, res){ let idusr = req.body.idusr InfoCli.findOne(idusr, (err, infocli) => { if (err) return res.status(500).send({message: 'Error making request: $(err)'}) if (!infocli) return res.status(404).send({message: 'The client does not exist '}) res.status(200).send({infoclient: infocli}) console.log(infocli) /*The console is not showing anything*/ }) }

Controlador (Este es el método put que pensé que funcionaría usando findOneAndUpdate)

 function updateByUsr(req, res){ let idusr = req.body.idusr let update = req.body InfoCli.findOneAndUpdate(idusr, update, (err, infocliUpdate) => { if (err) return res.status(500).send({message: 'Error making request: $(err)'}) if (!idusr) return res.status(404).send({message: 'The client does not exist '}) res.status(200).send({infocliente: infocliUpdate}) }) }

Rutas (no estoy 100% seguro de esto)

 const express = require('express') const InfoCliCtrl = require('../controllers/infoclient') const api = express.Router() api.get('/infoclient/:infocliId', InfoCliCtrl.getInfoCli) /*working*/ api.get('/infoclient/:idusr', InfoCliCtrl.getInfoByUsr)
about 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

En su app.js/server.js

deberías tener bodyparser instalado

 api.get('/infoclient/:infocliId', InfoCliCtrl.getInfoCli) api.post('/infoclient/:idusr', InfoCliCtrl.updateByUsr)

Si está pasando datos como parámetro de URL, como este /infoclient/:infocliId , entonces puede acceder a eso usando req.params.infocliId

Si está pasando usando el cuerpo POST, puede acceder a los datos usando req.body .

En infoClient.js

Para obtener datos de usuario

 exports.getInfoCli = function(req, res, next){ var incomingData = req.params.infocliId; InfoCli.findOne({idusr: incomingData}, function(err, data){ if(err){ return res.status(500); } else { return res.status(200).send({infoclient: data}) } }); }

Llame al código anterior por

GET - http://localhost:port/infoclient/3874234634 este 3874234634 es su infocliId que necesita pasar en la ruta

Para actualizar los datos del usuario

 exports.updateByUsr = function(req, res, next){ var userId = req.params.idusr; var updateData = req.body; InfoCli.findOneAndUpdate({idusr: userId}, updateData, {new: true }, function(err, data){ if(err){ return res.status(500); } else { return res.status(200).send(data) } }); }

En el código de actualización que hemos usado {new : true} es para devolver el documento actualizado de DB

Llame al código anterior por

Método POST: http://localhost:port/infoclient/3874234634 con datos en el cuerpo POST {name: 'pikachu', phone: 12345, ...}

así que lee el ID de usuario en el parámetro url usando req.params y datos del cuerpo en req.body

about 4 years ago · Santiago Trujillo Relatório

0

Creo que simplemente necesita cambiar la línea let idusr = req.body.idusr en su función getInfoByUsr() para let idusr = req.params.idusr

http://expressjs.com/en/api.html#req.body
http://expressjs.com/en/api.html#req.params

También verifique la sintaxis de su consulta findOne y findOneAndUpdate (porque idusr no es un Mongo _id sino una especie de ID de cadena personalizado):

 InfoCli.findOne({ idusr: idusr }, (err, infocli) => { ... InfoCli.findOneAndUpdate({ idusr: idusr }, update, (err, infocliUpdate) => {..

http://mongoosejs.com/docs/api.html#model_Model.findOne

about 4 years ago · Santiago Trujillo Relatório

0

Gracias a todos, sus respuestas me ayudan a corregir muchas cosas en el código. El problema fue un error horrible en las rutas.

Vea cómo estaba usando la misma ruta para dos solicitudes

 api.get('/infoclient/:infocliId', InfoCliCtrl.getInfoCli) /*working*/ api.get('/infoclient/:idusr', InfoCliCtrl.getInfoByUsr)

El problema fue que cuando usé el identificador para idusr estaba en conflicto con la búsqueda de ObjectId

Ahora

 api.get('/infoclient/idusr/:idusr', InfoCliCtrl.getInfoByUsr)
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