Thursday, 13 April 2017

Using findOne and findOneAndUpdate with HTTP request (mongoose)

I am making an api rest in which I want to make HTTP requests using Postman, specifically I want to perform a search or update a mongodb document, but this must be by an id which is not the doc_id that provides mongo

models Schema

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

Controller (This is the get method I know using findById and is working)

'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})     
    })
}

Controller (This is the get method which I thought would work using 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*/
    })
 }

Controller (This is the put method which I thought would work using 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})
    })
 }

Routes (not 100% sure about this)

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)



via Rwa

No comments:

Post a Comment