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...
Post a comment