Construyendo una App con Mongo(NoSQL)

Integreantes: Sergio Lizárraga

Docente: Ing. Patrick Jose Cuadros Quiroga

Para ello deberemos de tener una cuenta en https://www.mongodb.com/products/platform/atlas-database con un cluster ya creado con su BD y coleccion respectiva

Paso 1: Configuración de la Aplicación

Instalar Node.js para ello usaremos VisualStudio y usaremos el siguiente comando

npm init -y

Instalar Dependencias

Instala las dependencias necesarias para el proyecto:

npm install express mongoose dotenv

Crea un archivo .env para almacenar tu cadena de conexión de MongoDB:

MONGO_URI=mongodb+srv://<username>:<password>@cluster0.mongodb.net/app_db?retryWrites=true&w=majority
PORT=3000

Paso 2: Cracion de la App

Usar la siguiente estructura:

APP/
├── .env
├── app.js
├── models/
│   └── Item.js
└── package.json

En el archivo models/Item.js:

const mongoose = require('mongoose');

const itemSchema = new mongoose.Schema({
  name: { type: String, required: true },
  description: { type: String },
  createdAt: { type: Date, default: Date.now },
});

module.exports = mongoose.model('Item', itemSchema);

En app.js:

const express = require('express');
const mongoose = require('mongoose');
require('dotenv').config();

const app = express();
app.use(express.json());

// Conexión a MongoDB
mongoose
  .connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true })
  .then(() => console.log('Conectado a MongoDB Atlas'))
  .catch((err) => console.error('Error de conexión', err));

const Item = require('./models/Item');

// Rutas
app.get('/', (req, res) => res.send('Bienvenido a la Aplicación'));

// Crear un Item
app.post('/items', async (req, res) => {
  try {
    const item = new Item(req.body);
    await item.save();
    res.status(201).json(item);
  } catch (err) {
    res.status(400).json({ error: err.message });
  }
});

// Leer Items
app.get('/items', async (req, res) => {
  try {
    const items = await Item.find();
    res.json(items);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

// Actualizar un Item
app.put('/items/:id', async (req, res) => {
  try {
    const item = await Item.findByIdAndUpdate(req.params.id, req.body, { new: true });
    res.json(item);
  } catch (err) {
    res.status(400).json({ error: err.message });
  }
});

// Eliminar un Item
app.delete('/items/:id', async (req, res) => {
  try {
    await Item.findByIdAndDelete(req.params.id);
    res.json({ message: 'Item eliminado' });
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

// Iniciar el Servidor
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Servidor corriendo en el puerto ${PORT}`));

Ahora solo queda iniciar el servidor:

node app.js