Creación de un CRUD simple con Node.js, Express y MongoDB

Continuamos con los pequeños proyectos API en esta ocasión vamos a crear un REST API para agregar productos en una colección de MongoDB.

Te puede interesar

Para empezar tenemos que verificar que tenemos instalado Node.js en nuestro entorno de desarrollo mediante el comando:

node -v 
npm -v

Listo si tenemos instalado lo necesario vamos a proceder a crear la carpeta para el proyecto le vamos a nombrar crud-express.

Dentro de este directorio vamos a ejecutar el comando:

npm init

El comando crea un archivo package.json que nos ayuda a administrar las dependencias que vamos a necesitar para nuestro proyecto.

Vamos a abrir nuestro editor de código preferido en mi caso uso Visual Studio Code, para crear un archivo llamado server.js, puedes llamarlo como gustes.

Agregar la dependencia Express para crear el servidor

Agregaremos la dependencia mediante el siguiente comando:

npm install express --save

 –save guarda express como una dependencia en package.json. Luego con el comando npm install se podrán recuperar todas las dependencias.

En nuestro archivo server.js vamos a agregar el siguiente código para iniciar nuestro servidor Express lo que vamos a hacer es importar los módulos necesarios para ejecutarlo.

const express = require('express');
const app = express();
const port = 3000;

app.listen(3000, function () {
    console.log('listening on '+port)
});

Adicional tenemos que indicarle el puerto, lo suelo poner como constante pero tu puedes ponerlo directamente en el método listen.

Agregaremos un metodo GET para comprobar el funcionamiento de nuestro servidor.

app.get('/', (req, res) => {
    res.send("Hello world!")
})

Ahora, ejecutamos en nuestra consola node server.js y en un navegador escribiremos la ruta http://localhost:3000 podremos ver nuestro mensaje de Hello world! entonces nuestro servidor esta funcionando correctamente.

Agregamos nodemon a nuestro proyecto

Para facilitarnos el desarrollo instalaremos nodemon esta dependencia reinicia automáticamente el servidor cada que existe un cambio en los archivos del proyecto.

En este caso solo necesitamos nodemon en el proceso de desarrollo por ello lo guardaremos con la bandera –save-dev para que lo guarde como dependencia de desarrollo.

npm install nodemon --save-dev

Una vez instalado agregaremos una clave de script en nuestro archivo package.json para ejecutar nodemon con un comando npm.

En la sección de scripts agregamos lo siguiente:

"scripts": {
    "dev": "nodemon server.js",
  }

Ahora en nuestra consola ejecutamos el comando para llamar este script:

npm run dev

Agregamos MongoDB para guardar los datos

En este caso vamos a usar la dependencia de MongoDB para la conexión, por ser un ejemplo practico no vamos a ver mongoose lo dejaremos para otro tutorial.

Instalamos la dependencia ejecutando el siguiente comando

npm install mongodb --save

En nuestro archivo server.js crearemos la constante de conexión de MongoDB

const MongoClient = require('mongodb').MongoClient

Y el código para la conexión es el siguiente, recuerda que todo esto lo manejaremos en nuestro server.js

MongoClient.connect('mongodb://localhost/crud-express', { useNewUrlParser: true, useUnifiedTopology: true }, (err, client) => {
    if (err) return console.error(err)
    console.log('Connected to Database')
})

Una vez que tenemos la conexión ya podemos empezar a crear nuestro CRUD API.

Para que express envié y reciba los datos en formato JSON le agregaremos una nueva dependencia body-parser para ello ejecutamos el siguiente comando

npm install body-parser --save

Creación del CRUD

Vamos a definir dos constantes que tenemos que usar en nuestros métodos, GET, POST, PUT, DELETE en nuestro archivo server.js agregaremos los siguientes cambios

let db;
let collection;
MongoClient.connect('mongodb://localhost/crud-express', { useNewUrlParser: true, useUnifiedTopology: true }, (err, client) => {
    if (err) return console.error(err)
    console.log('Connected to Database')
    db = client.db('crud-express')
    collection= db.collection('product')
})

Las variables db y collection nos permitirán las conexiones ya acciones sobre nuestros datos.

Luego vamos a crear cada uno de los métodos para nuestro REST

GET: Obtener la colección de datos ingresados

app.get('/product', (req, res) => {
    db.collection('product').find().toArray()
        .then(results => {
            res.json(results);
        }).catch(error => console.error(error));
})

POST: Agregar un nuevo producto en la colección

app.post('/product', (req, res) => {
    collection.insertOne(req.body)
        .then(result => {
            res.json('Success');
        })
        .catch(error => console.error(error))
})

PUT: Modificar los datos mediante el nombre del producto

app.put('/product/:id', (req, res) => {
    collection.findOneAndUpdate(
        { name: req.params.id },
        {
            $set: {
                name: req.body.name,
                price: req.body.price
            }
        },
        {
            upsert: true
        }
    ).then(result => { res.json('Updated') })
        .catch(error => console.error(error))
});

DETELE: Eliminar una colección de nuestra base de datos no relacional

app.delete('/product/:id', (req, res) => {
    collection.deleteOne(
        { name: req.params.id }
    )
        .then(result => {
            res.json('Deleted')
        })
        .catch(error => console.error(error))
})

Listo amigos mediante una aplicación o su propio código front-end podemos consumir este servicio REST para nuestro ejemplo usaremos POSTMAN.

Quieres saber mas de POSTMAN lee nuestro articulo

Si deseas el proyecto lo puedes clonar de nuestro repositorio en GITHUB

Deja un comentario