← Back Published on

CRUD backend Node (Express) y MongoDB

Hola, hoy voy a hacer una pequeña guía para hacer un CRUD simple en js, lo que vamos a necesitar es:

  • Node.js (con npm)
  • Express
  • Mongodb
  • nodemon
  • bodyParser
  • dotenv [opcional]
  • postman [o thunderclient o algo por el estilo]

Suponiendo que tenemos Nodejs en una versión mas o menos actual vamos a crear el package.json (aquí se guardan todos los paquetes que vamos a utilizar).

npm init

y creamos el archivo del servidor server.js (es indiferente el nombre que le demos).

Instalamos express en el proyecto (express es un framework de nodejs que nos facilita la creación de servidores, lo facilita mucho)

npm i express --save

El --save hace que se guarde en el package.json

Dentro del server.js:

<b>const</b> express = require('express');
<b>const</b> app = express();
<b>const</b> port = 8000;

app.listen(8000, <b>function</b> () {
    console.log('Server up || On port: '+port)
});

app.get('/', (req, res) => {
    res.send("Servidor funcionando")
})

Con este código estamos iniciando el servidor con listen, y con get estamos creando una respuesta del servidor al entrar en la pagina "/"

Si entramos en localhost:8000 nos aparecerá Servidor Funcionando.

Podemos añadir nodemon para facilitar el no tener que estar abriendo todo el rato el servidor

npm install nodemon --save-dev

En el apartado de scripts de package.json incluimos lo siguiente:

<b>"scripts"</b>: {
    <b>"dev"</b>: "nodemon server.js",
  }

y para ejecutar el server:

npm run dev

Para acceder a la base de datos tenemos que tener una cuenta en Mongodb Atlas, la hacemos, generamos nuestro cluster y creamos nuestra base de datos y la colección a la que queremos acceder.

Ahora que tenemos la db generada tenemos que ir a connect, connect to app o algo así, seleccionar node y nos aparecerá algo como esto:

mongodb+srv://scthch:<password>@[blabla]

Ahora necesitamos una manera de acceder a la base de datos y de manejar los datos, para ello vamos a instalar lo siguiente:

npm install mongodb --save
npm install body-parser --save
<i>//Esto arriba del todo</i>
<b>const</b> MongoClient = require('mongodb').MongoClient
<b>const</b> bodyParser = require('body-parser'); 

<i>//[...código...]</i>

<b>let</b> db;
<b>let</b> collection;
MongoClient.connect('mongodb+srv://scthch:<password>@[blabla]', 
{ useNewUrlParser: <b>true</b>, useUnifiedTopology: <b>true</b> }, (err, client) => {
    <b>if</b> (err) <b>return</b> console.error(err)
    console.log('Connected to Database')
    db = client.db('crud')
    collection= db.collection('prueba')
})

<i>//Encima del app.get("/")</i>
app.use(bodyParser.json());

Donde db y collection son los nombres que hemos puesto en mongodb, es necesario para poder acceder a ello.

En este caso la contraseña de nuestra base de datos queda expuesta, por lo que vamos a usar .env, para ello:

npm i dotenv

Generamos un archivo .env y ahí escribimos

DB_LINK = mongodb+srv:<i>//scthch...</i>

Y ahora podemos acceder desde server.js si hacemos lo siguiente:

require('dotenv').config() <i>//Para guardar información comprometida</i>
[...]
<b>const</b> server = process.env.DB_LINK <i>// la conexión</i>
[...]
MongoClient.connect(server, {useNewUrlPar...

Podemos guardar otra información como el puerto etc..

Y por ultimo nos quedarían los métodos HTML:

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

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

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

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

Y ya solo nos quedaría probar con postman si todo funciona :)

Luego sólo nos quedaría subirlo a heroku o algún servicio similar y a disfrutar de nuestro backend :D

Edit this block to edit the article content or add new blocks...