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