Si vamos a usar un webservices vamos a necesitar conectar mongodb y nodejs para guardar información.
Recuerden ver nuestros otros post sobre este tema:
Mongoose para nodejs
vamos a instalar lo siguiente:
npm i mongoose –save
Este será nuestro conector para mongodb , tiene las funciones suficiente para hacer todo lo que necesitas en mongo.
Vamos a crear un documento nuevo llamado mongooseeconections.js
var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/ubikt', { useCreateIndex: true, useFindAndModify: false, useNewUrlParser: true }).then(db => console.log('conexion exitosa')) .catch(err => console.log('error: ', err))
si ejecutamos este código vamos a ver que se conecta a nuestra base de datos y nos dice conexion exitosa, no necesitamos crear nada ya que lo hace de forma automática.
Modelos para trabajar con mongodb y nodejs
Cada colección que tengamos en nuestro mongo debemos crear un modelo, esto ayuda para que siempre tengamos la misma estructura en todo nuestro código, llenemos información más fácil o podamos hacer validaciones.
const mongoose = require('mongoose'); const { Schema } = mongoose; const loginInfo = new Schema({ userId: { type: String, unique: true, required: true }, password: { type: String, required: true }, date: { type: Date, default: Date.now }, access: { type: Boolean, default: false }, code: { type: String, required: true } }); module.exports = mongoose.model('login', loginInfo);
Como podemos ver, de manera muy fácil colocamos qué valor son requeridos y cuáles no, si lo llenamos mal nos regresará un error diciendo que es requerido cierto valor.
Usando nuestros modelos
const express = require('express'); const router = express.Router(); const modelLogin = require('../model/Login'); 'use strict'; router.post('/signup', async(req, res) => { var { user, pass } = req.body; // logica de login clave = 2212; let xlogin = new modelLogin({ user: user, pass: pass, code: clave }) await xlogin.save((error, signup) => { if (error) { if (error.code == 11000) { responseb.error = true; responseb.codigo = 401; responseb.mensaje = 'Ya Existe este usuario'; res.status(401).send({ responseb }); } else { responseb.error = true; responseb.codigo = 304; responseb.mensaje = error.code; res.status(304).send({ responseb }); } } else { responseb.error = true; responseb.codigo = 200; responseb.mensaje = { id: signup._id, tk: token }; res.send({ responseb }); }
Si ponemos console.log a xlogin, vamos a ver que nos da la estructura de mongodb, pero no lo hemos guardado aún, para esto debemos usar nuestro método .save(), y await para que esperemos hasta que se guarde la información.
Cada que vamos a hacer un insert podemos hacerlo de esa manera, llenamos nuestro modelo y luego invocamos a .save().
otro ejemplo cree un modelo para perfil de usuario:
usri = new userinfo({ email: req.body.email, name: req.body.name, lastName: req.body.lastName, lastName2: req.body.lastName2, idLocation: [], idFav: [] }) usri.save((error, tok) => { if (error) { responseb.error = false; responseb.codigo = 400; responseb.mensaje = error; res.status(400).send(responseb) } else { responseb.error = false; responseb.codigo = 200; responseb.mensaje = tok._id; res.status(201).send(responseb) } })
Buscar en mongodb con mongoosee (fing y fingOne)
Para buscar información vamos a usar lo siguiente, vamos a usar nuestro modelo por ejemplo modelLogin ya que tenemos la estructura y el llamado de la colección.
Si vemos la documentación de mongo, para buscar un archivo, usamos el método fing()
para mongoosee usaremos el mismo método fing de la siguiente forma:
router.post('/login', (req, res) => { // logica de login modelLogin.find({ user: req.body.user, pass: req.body.pass }, (error, sok) => { if (error) { responseb.error = true; responseb.codigo = 304; responseb.mensaje = error; res.status(304).send({ responseb }); } else { if (sok.length == 0) { responseb.error = true; responseb.codigo = 404; responseb.mensaje = 'no se encontro ningun registro, comprueba contraseña sea correcta o el correo esta bien escrito'; res.status(404).send({ responseb }); } else { if (sok[0].access) { responseb.error = false; responseb.codigo = 200; responseb.mensaje = token; res.send({ responseb }) } else { responseb.error = true; responseb.codigo = 403; responseb.mensaje = 'no ha confirmado su correo, verifique su bandeja de entrada'; res.status(403).send({ responseb }) } } } }); });
Si queremos usar una busqueda mas especifica podemos usar findOne, traeremos solo un valor a comparación de find, que trae todos los valores que coinciden.
Update y delete con mongoosee y node js
Otros de los métodos que vamos a usar muy seguidos es el método update y delete para actualizar y borrar un registro.
Para borrar vamos a usar el metodo findOneAndDelete:
await modelLogin.findOneAndDelete({ _id: req.params.id }, (error, modify) => { if (error) { responseb.mensaje = error; responseb.error = true; responseb.codigo = 400; res.status(400).send(responseb); } else { responseb.mensaje = error; responseb.error = false; responseb.codigo = 201; res.status(201).send(responseb); } });
findOneAndXXXXXX, el primer parametro es una búsqueda especifica (como un where) enseguida, ese resultado no los regresa en un objeto y es el que vamos a modificar o borrar.
Si queremos actualizar usaremos el siguiente método findOneAndUpdate que es muy parecido al método anterior o podemos usar lo siguiente:
await userprop.findOne({ _id: req.params.id }, (error, modify) => { if (error) { responseb.mensaje = error; responseb.error = true; responseb.codigo = 400; res.status(400).send(responseb); } else { if (req.body.properties.user != undefined) { modify.properties.user = req.body.properties.user; } console.log(modify) modify.save((error, tok) => { if (error) { responseb.mensaje = error; responseb.error = true; responseb.codigo = 400; res.status(500).send(responseb); } else { responseb.mensaje = 'todo bien'; responseb.error = true; responseb.codigo = 204; res.status(204).send(responseb); } }) } });
Con este es un funcionamiento básico de esta gran herramienta.
recuerden seguirnos en telegram.