Crear una API RESTful: Combinar Express, Node.js y MongoDB

Crear una API RESTful: Combinar Express, Node.js y MongoDB

¿Cómo crear una Rest API en MongoDB?

Ahora que tenemos la posibilidad de utilizar MongoDB para almacenar los datos de forma persistente, podemos implementar express y MongoDB para construir una rest api.

Ejemplo de un programa en Nodejs que crea una Rest Api con Express y MongoDB

// imports
const express = require("express");
const logger = require("morgan");
const errorHandler = require("errorhandler");
const mongodb = require("mongodb");
const mongo = mongodb.MongoClient;
const bodyParser = require("body-parser");
const uri = "mongodb://localhost:27017";
const app = express();

// middlewares
app.use(logger("dev"));
app.use(bodyParser.json());

// conectar a la base de datos
mongo.connect(uri, (err, con) => {
    // collection
    const estudiantesCollection = con.db("escuela").collection("estudiantes");

    // en caso de error finalizar
    if (err) {
        console.log(`No se puede conectar con la uri ${uri}`);
        process.exit(1);
    }

    app.get("/estudiantes", (req, res) => {
        estudiantesCollection.find({}).toArray((err, estudiantes) => {
            if (err) {
                console.log(err);
                return res.sendStatus(500);
            }
            res.send(JSON.stringify(estudiantes, null, 2));
        });
    });

    app.post("/estudiantes", (req, res) => {
        estudiantesCollection.insert(req.body, (err, respuesta) => {
            if (err) {
                console.log(err);
                return res.sendStatus(500);
            }
            res.send(JSON.stringify(respuesta, null, 2));
        });
    });

    app.put("/estudiantes/:id", (req, res) => {
        estudiantesCollection.update(
            { _id: req.params.id },
            { $set: req.body },
            (err, respuesta) => {
                if (err) {
                    return res.sendStatus(500);
                }
                res.send(JSON.stringify(respuesta, null, 2));
            }
        );
    });

    app.delete("/estudiantes/:id", (req, res) => {
        const _id = req.params.id;
        estudiantesCollection.remove({ _id }, (err, respuesta) => {
            if (err) {
                return res.sendStatus(500);
            }
            res.send(JSON.stringify(respuesta, null, 2));
        });
    });

    app.listen(3000);

    console.log("Listening on http://localhost:3000");
});