Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Back end vs Fron end - Vídeo 6 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
conexión con la base de datos de mongoDB - mongoose.connect - funciones flecha o anónimas.
Bueno, en este vídeo vamos a ver cómo hacer la conexión con la base de datos de MongoDB desde nuestro desarrollo, desde nuestro backend.
00:00:01
Como no puede ser de otra forma, tenemos que tener activadas por lo menos el Mongo, ¿vale?
00:00:14
Entonces, si me vengo a el iconito, el botoncillo de Docker, que le hemos, que lo instalamos la extensión, veo que el Mongo lo tengo levantado, ¿vale?
00:00:23
El servicio de Mongo lo tengo levantado, así que podría empezar a trabajar.
00:00:36
De todas formas, bueno, pues ya que tenemos también el Express, por si nos hace falta, también lo voy a levantar, ¿vale?
00:00:40
Ya los tenemos los dos, ya nos podemos poner a trabajar.
00:00:46
Bueno, ¿qué módulo usa Node para hacer esa conexión, entre otras cosas, a nuestra base de datos de Mongo?
00:00:48
Usa un módulo que se llama Mongoose.
00:01:00
¿Vale? Entonces, Mongoose, además de utilizarse para la conexión con la base de datos,
00:01:04
Lo que hace es, por ejemplo, hacer esa plantilla que os he comentado en algún vídeo, para siempre los documentos que estamos guardando en nuestras colecciones de datos, hacerlos siempre con los mismos clave-valor.
00:01:11
No hacer documentos de diferentes tamaños, lo cual sería, para lo que nosotros estamos buscando, algo un poco extraño.
00:01:33
Vale, entonces vamos a hacer primero esa conexión, vamos a ver lo que es o cómo se trabaja con Mongoose
00:01:41
y vamos a ver lo que son las funciones flecha o funciones anónimas que creo que ya las habéis visto pero no lo tengo claro.
00:01:52
Vale, entonces os hago una pequeña explicación y ya está.
00:02:03
Bueno, entonces lo primero que vamos a hacer es venirnos a nuestro fichero de BJS, que le hemos creado justo para implementar las operaciones que vamos a hacer sobre la base de datos.
00:02:09
La primera operación que vamos a hacer es hacer la conexión. Para ello lo primero que tengo que hacer es cargar el módulo de Mongoose.
00:02:23
de Mongoose con Node? Pues como siempre, desde el terminal, el npm y mongoose. Vale, esto
00:02:39
le damos a intro y nos va a hacer la instalación, va a cargar el módulo de Mongoose. Vale,
00:02:56
vale ya lo tendríamos cargado hasta que no hagamos algo con él pues esto no hace nada vale pero ya
00:03:05
lo tenemos cargado entonces qué es lo primero que voy a hacer importar desde o sea en el fichero de
00:03:12
b.js vale importó mongoose from mongoose vale vale entonces a partir de aquí yo empiezo a hacer la
00:03:19
conexión la conexión es algo tan simple como poner mongoose.connet
00:03:32
y le voy a pasar como string
00:03:41
la dirección vale en este caso sería mongo db dos puntos dos barras localhost
00:03:46
porque lo tenemos metido perdón lo tenemos configurado en nuestra máquina como como
00:03:55
el local vale el mongo recordarlo pondría el local host pondría
00:04:07
el nombre de la base de datos que voy a crear y cuidado si nos metemos vamos a poner por ejemplo
00:04:17
vamos a crear una base de datos que se va a llamar
00:04:25
dan2db
00:04:28
dan2db
00:04:30
vale, si
00:04:32
yo hago esta conexión
00:04:34
esta base de datos
00:04:36
ahora mismo no existe
00:04:38
nosotros tenemos, voy a abrir
00:04:39
el localhost
00:04:42
vamos a ver
00:04:46
esto estáis viendo
00:04:49
el navegador
00:04:52
no, si
00:04:54
Vale, vamos a abrir el MongoDB Express, ¿vale? Como siempre nos pide el nombre de usuario que le pusimos root y el password que le pusimos root, ¿vale?
00:04:58
Entonces vemos que no tenemos ninguna base de datos que se llame DAM2DB, ¿vale?
00:05:15
En Mongo no se crea esa base de datos hasta que no se mete el primer documento en la colección, ¿vale?
00:05:25
En la base de datos.
00:05:36
Entonces, aunque nosotros metamos aquí un nombre que no existe, no importa porque luego lo va a crear. Vale, entonces volvemos a Visual Studio Code y aquí lo vamos a dejar así.
00:05:37
Vale, esto nos haría la conexión con la base de datos, vale, bueno, si estuviéramos usando MongoDB Atlas o un servidor de MongoDB en otro equipo o cosas así, en vez de poner aquí localhost pondríamos el dominio, la IP, vale,
00:05:58
Y si metiéramos un usuario y una password, porque ahora mismo yo estoy creando una base de datos en Mongo, pero no le estoy metiendo un usuario y una password de acceso, ¿vale? Estoy accediendo yo desde el backend y eso, bueno, pues tampoco está bien del todo, ¿vale? Yo ahora lo voy a dejar así por comodidad.
00:06:23
Si sí que creara esa base de datos con un usuario y un password, pondríamos ahí el MongoDB, dos puntos, slash, slash, pondría user, el usuario y la password, ¿vale?
00:06:45
Y aquí le pasaría arroba y luego ya el localhost, el slash, ¿vale?
00:07:01
Entonces, bueno, voy a dejar esto comentado y así lo tenemos aquí para no olvidarnos de que se hace así, ¿vale?
00:07:10
Por ahora nosotros vamos a usar el mongoose.connect y vamos a meter el mongo.tb, dos puntos, slash, slash, localhost y ya hemos dicho dan2db, ¿vale?
00:07:19
bueno pues esto es mongoose.com
00:07:49
la herramienta connect vale para conectaros a la base de datos luego veremos en otro
00:08:00
vídeo que existe en mongoose.es
00:08:15
este vale que es para crear esos esquemas eso esas plantillas para los
00:08:22
datos vale para meter siempre las mismas documentos el mismo número de clave
00:08:28
valor en los documentos y con una serie de restricciones vale y vamos a trabajar
00:08:36
con el connect y con el exchange vale entonces por ahora voy con el connect vale entonces nosotros
00:08:40
aquí si yo ejecutara este o llamara este js bueno pues se haría la conexión a la base de datos vale
00:08:47
pero nosotros no estamos llamando a diferentes ficheros estamos llamando a app de app y vamos
00:08:58
llamando a index vale y configurando y diciendo que es lo que queríamos que usarán los diferentes
00:09:06
módulos vale entonces yo lo que quiero es desde index importar una variable que me arranque esa
00:09:14
conexión a la base de datos vale entonces para hacer eso lo que voy a hacer es crearme una una
00:09:26
constante una variable perdón que lo voy a llamar el connect debe que esto se suele llamar siempre
00:09:37
así vale entonces yo ahora tengo una variable que jota es en javascript siempre lo vais a poner con
00:09:46
el cons tengo una variable que se llama con el db y que le digo que en esta esta variable la voy a
00:09:54
usar para ejecutar el mongoose.connet y hacer la conexión con la base de datos. Si yo esto lo quiero
00:10:03
exportar e importarlo en index.js, entonces teníamos que poner aquí el export. Vale, os tenéis que
00:10:12
acordar de eso. Cada vez que exportamos, queremos exportar una variable para utilizarla en nuestro
00:10:22
desarrollo siempre con el export vale recordar que metíamos el default vale metíamos el default
00:10:30
vale en este caso no lo voy a meter
00:10:46
como hacíamos por ejemplo donde era en app no si aquí veis teníamos el sport de faul app
00:10:55
Vale, app lo creamos aquí, constante app es igual a express, bueno, aquí lo ponía de esta manera, vale, si en db no meto el default, que no es obligatorio, aunque todos los desarrolladores web lo van a poner, vale, eso me obliga a que si yo lo quiero importar en index.js,
00:11:05
aquí quiero importar el connect db vale esa variable lo tengo que meter entre llaves
00:11:32
connect aquí lo tengo vale y ya os dice ya os marca directamente en el fichero en el que está
00:11:43
esta variable pero os tenéis que acordar que si no meto el default en db entonces hay que
00:11:51
meter esas llaves, vale
00:12:01
vale, esto me lo ha puesto
00:12:04
porque antes lo he escrito mal
00:12:07
vale, ya está
00:12:09
vale
00:12:11
y tenemos entonces una variable
00:12:13
una conexión
00:12:15
bien
00:12:16
vale, ahora lo que quiero utilizar
00:12:19
son funciones flecha, vale
00:12:21
y quiero utilizar funciones flecha
00:12:23
porque en este tipo de
00:12:26
desarrollos es lo que más se utiliza porque además podemos controlar
00:12:29
por ejemplo como vamos a hacer aquí un try and catch por si hubiera algún tipo
00:12:36
de problema porque un problema que vosotros tenéis que
00:12:41
tener siempre en la cabeza y que a veces nos encontramos con ellos en las
00:12:46
defensas de los tfg es que hacéis una hacéis operaciones
00:12:52
que requieren que el desarrollo se pare hasta que se obtenga un resultado de esa operación, ¿vale?
00:12:59
Y eso no es correcto. Siempre operaciones que tenemos que esperar a obtener un resultado, pues hay que hacerlas de forma síncrona o con procesos o con hilos o con lo que sea,
00:13:09
pero nunca separa un desarrollo, el funcionamiento de una aplicación porque es que hay que hacer una determinada operación, ¿vale?
00:13:26
Entonces, cuando se estudian los procesos y vosotros que tenéis un módulo, este curso que lo estudiáis, veréis el porqué.
00:13:37
Entonces, en JS, en Javascript, ese tipo de funciones que se ejecutan en segundo plano se usan, se crean con dos parámetros, que uno es el await y otro es el async y tienen que ir los dos juntos, ¿vale?
00:13:44
Entonces, para usar esos dos parámetros necesito esas funciones flecha. Las funciones flecha o funciones anónimas también son muy cómodas cuando quieres pasar como parámetro de entrada a funciones, otras funciones, ¿vale? Entonces, ahí las funciones flecha ahora mismo se suelen utilizar bastante.
00:14:05
Voy a venir aquí abajo, ¿vale? Luego esto lo voy a borrar, pero para que entendáis un poco cómo es, yo tengo una función clásica, vamos a hacer funciones aritméticas, ¿vale?
00:14:26
Esto sería una función clásica, función sumar, esto aquí con sus llaves y le digo el return a más b, ¿vale? a más b, ¿vale?
00:14:43
Esta es una función clásica de toda la vida, una función que tiene un nombre, tiene unos parámetros de entrada y para devolver un resultado le hemos pasado el return, ¿vale? Puede tener más operaciones como siempre, bueno, ya las conocéis y no tiene ningún misterio.
00:15:03
Ahora bien, una función flecha lo que hace es asignar esta función a una variable.
00:15:20
Vale, entonces el paso fue crear esa variable, le poníamos un nombre, pues por ejemplo le podíamos poner, no sé, ya que estamos con las operaciones aritméticas,
00:15:34
pues le ponemos resta, constante resta, es igual a función, le pasábamos los dos parámetros, le pasaba esto, return, y le decía x menos, vale, entonces de este tipo de funciones clásicas de esta estructura pasamos a esta, vale,
00:15:52
Y ya podíamos asociar una función a una variable, en este caso resta, yo podía llamar a resta y podía utilizarla de esta manera, ¿vale? Esto empezó a evolucionar más, entonces le decía, bueno, yo lo que quiero es hacer una función flecha, vamos, quiero hacer una función flecha.
00:16:22
Yo lo que quiero es, está claro que si yo declaro una variable, este por ejemplo, este nombre de función aquí, si tiene un igual, tiene unos paréntesis, unos valores que están entrando, tiene un resultado, se puede simplificar un poco más, ¿vale?
00:16:43
Entonces aquí metíamos cons, ahora vamos a hacer por ejemplo la multiplicación, esto es igual a, bueno pues ya sé que es una función, entonces eso pues no me hacía falta, entonces pongo x e y, ¿vale?
00:17:02
Y, eh, podíamos decir, en vez de usar, bueno, pasábamos esta sintaxis, decía esto va a ser igual a, eh, x por pi, ¿vale?
00:17:19
Vale, y esto era una función flecha que tenía una variable que le pasamos unos parámetros, le ponemos el simbolito de la flecha, por eso es el nombre de la función flecha, y hacíamos las diferentes operaciones metiendo este return, que es el que me devuelve ese valor.
00:17:50
Entonces, esto todavía se podía ir simplificando mucho más, porque tú podías poner, por ejemplo, constante, pues ahora vamos con el cuadrado, que esto es igual a x flecha, y vamos a ponerlo todo, ahora lo simplifico, retun x por x.
00:18:15
vale entonces yo tenía esta esta función que ahora mismo es exactamente igual que la de arriba vale
00:18:47
pero dices bueno en este caso sólo le pasó un parámetro así que estos paréntesis me los puedo
00:18:57
cargar así que me los quito vale luego solo estoy haciendo una operación entonces con las llaves
00:19:04
también me permite quitarlas y además esta operación es además de ser la única que estoy
00:19:15
haciendo es la que devuelve un valor entonces ese reto también lo puedo quitar valiendo es una
00:19:22
operación flecha al final o anónima es esto vale entonces siguiendo un poco estos pasos voy a
00:19:29
borrar esto siguiendo un poco esos pasos es lo que quiero convertir o es lo que quiero hacer sobre
00:19:38
esta sobre esta línea sobre esta sentencia vale entonces tenemos el sport el cons con el db esto
00:19:47
es igual aquí pasaríamos un valor vale pondríamos los parámetros de entrada en
00:19:59
este caso no hay parámetros de entrada bueno pues le voy a poner paréntesis
00:20:13
paréntesis y pasaríamos
00:20:17
él la flecha vale
00:20:21
tendríamos esto y tendría así y esta sería mi función flecha
00:20:27
vale ahora os he dicho para
00:20:40
hacer que una función se ejecute en segundo plano tengo que jugar con el
00:20:45
la white y con el async vale entonces todas las función todas las operaciones que quiero que se
00:20:50
ejecuten en segundo plano le voy a meter aquí en la vuelta vale y me lo pone como si hubiera
00:20:57
un error entonces eso es porque tiene que ir siempre con el async entonces async aquí le
00:21:04
metemos el async vale y esto ya no nos va a funcionar bien y qué es lo que estamos diciendo
00:21:11
vale vas a importar desde index j s vas a importar esta esta variable esta variable lo que hace es
00:21:18
la conexión con la base de datos de mongo db la hace de una forma en segundo plano
00:21:36
asíncrona vale de tal forma que voy a poder ejecutar voy a poder seguir ejecutando mis
00:21:42
otras operaciones de mi desarrollo vale bueno que más tenemos que tener en cuenta como desarrollo
00:21:48
como desarrolladores estás hablando de una conexión a una base de datos cualquier operación
00:21:58
sobre una base de datos es sensible y siempre se puede producir algún error vale entonces como
00:22:05
buenos desarrolladores sabéis que esos errores hay que controlarlos entonces qué es lo que vamos a
00:22:15
utilizar el try y el catch entonces aquí lo que vamos a hacer es meter el try este le vamos a
00:22:23
meter con sus llaves y vamos a poner esto aquí con sus llaves
00:22:33
vale en el cat vamos a recoger el error el posible error que se pueda dar vale
00:22:52
entonces tenemos el cat tenemos
00:23:02
ahora ya ves bien, sí, wait, tenemos que si se produce un error, yo lo que quiero saber es qué error se ha producido,
00:23:08
entonces le vamos a meter un console.log que nos visualice por el terminal ese error, ¿vale?
00:23:22
Vale, y si se produce la conexión a la base de datos, pues le vamos a decirle también,
00:23:31
le voy a pasar un string al terminal diciéndole, oye, pues la conexión a la base de datos es ok, ¿vale?
00:23:40
Entonces ya lo tenemos, ya tendríamos lo que sería nuestra función flecha para la conexión a MongoDB, ¿vale?
00:23:59
Entonces la tenemos así, hemos comprobado el tema de los errores, bueno, en principio yo creo que ya estaría, me vengo a index, hemos importado con el db esta variable, ahora que aparece aquí como deshabilitada, hay que usarla, ¿vale?
00:24:08
y qué es lo que voy a meter aquí, connet db, vale, y, cuando, donde ponemos, porque al final es importante, donde metes ese connet db, lo metemos, antes o después de arrancar el express,
00:24:27
Vale, yo lo voy a poner antes, aunque en principio nos puede dar igual, yo lo pongo antes, ¿por qué? Porque lo que hemos hecho ha sido hacerlo asíncrono, así que mientras se está haciendo la conexión a la base de datos, lo que hace mi desarrollo es levantar el express, ¿vale?
00:24:57
Entonces me da un poco lo mismo. Entonces vamos a coger ahora y vamos a hacer pruebas de todo esto. Por supuesto, para hacer esa conexión tiene que estar, lo que os he dicho antes, activado Mongo, ¿vale?
00:25:21
Entonces, ¿qué es lo que voy a hacer ahora? Arrancar mi aplicación. Si yo la arranco, ponemos run npm run dep, ¿vale? Si yo pongo npm run dep, vale, me dice, servidor activado en el puerto 4000, o sea, el express lo ha lanzado y la conexión a la base de datos es ok, ¿vale?
00:25:32
Fijaros como está el index, he metido primero el CONETDB, aunque aquí me lo está diciendo después, ¿por qué? Justo porque la hemos hecho que se ejecute en segundo plano, la hemos hecho asínclona, ¿vale?
00:26:02
Si yo no hiciera eso, fijaros la diferencia, si yo cojo y en dbjs quito el await y le voy a quitar también el async, que no me haría falta pero se lo voy a quitar, ¿vale?
00:26:17
vale si hacemos esto y yo cojo y lo arrancó ahora ya tenéis una diferencia no ya hasta que no he
00:26:37
hecho la conexión con la base de datos no haga no ha lanzado el express vale entonces es importante
00:26:50
es muy importante que esto lo diseñe jce bien vale puede ser que no queráis lanzar el servidor hasta
00:26:58
que no esté la base de datos por lo que sea por seguridad por lo que sea vale
00:27:05
pero lo tenéis que pensar muy bien y en el caso del tfg defenderlo vale que no
00:27:09
se os olvide en este caso voy a volver a poner
00:27:17
vamos a volver a poner el async async y vamos a volver a poner el agua
00:27:26
vale, y tendríamos ya hecho todo, ¿qué más podríamos hacer?, ¿qué otra prueba podríamos hacer para ver que nos funciona todo bien?, vamos a parar el mongo,
00:27:40
vale, ahora en teoría no tenemos la base de datos, así que no se podría generar esa conexión, producir esa conexión, y nos tendría que visualizar algún tipo de error,
00:27:55
Vamos otra vez a lanzarlo
00:28:10
En este caso, acordaros que
00:28:12
En
00:28:15
Vamos a ver
00:28:16
En package.json
00:28:18
Que ya tenemos también la dependencia
00:28:20
De mongoose
00:28:22
Eh, tenía
00:28:23
Os hice otro script para ver lo de
00:28:26
Watch, vale, entonces vamos a arrancar
00:28:28
Ahora en vez de con dev, con dev2
00:28:31
Para, no estar siempre
00:28:32
Haciendo lo mismo, vale, entonces ahora pongo
00:28:34
Npm run dev2
00:28:36
Vale, eso lo ejecuto, como lo hemos hecho, hemos puesto el await y el async, intenta hacer la conexión a la base de datos que está cerrado, me dice que ha lanzado el express, el servidor en el puerto 4000, se queda intentando hacer esa conexión con la base de datos, está buscando, buscando,
00:28:38
y en un momento dado, cuando exceda el tiempo, nos saltará ahí cualquier error, ¿vale?
00:29:03
En este caso, ya lo está diciendo aquí, ¿vale? Es que nada, que nos tira para afuera, ¿vale?
00:29:13
En el momento en el que volvemos a activar Mongo, pues ahí ya tenemos, ¿vale?
00:29:22
La conexión a la base de datos es ok y ya tendríamos todo bien configurado.
00:29:40
Si nos venimos ahora y vemos nuestra base de datos en Mongo Express,
00:29:45
que esto tendremos que volver a levantar el servicio, ¿vale? Ya está.
00:29:58
Vemos que aunque hemos hecho la conexión con DAM2DB, aquí no se ha creado, ¿vale?
00:30:07
Es un poco lo que os decía antes, que hasta que no metemos un documento, hasta que no hacemos una colección, no se va a quedar registrada.
00:30:14
Eso lo haremos en el próximo vídeo.
00:30:26
Un saludo. Hasta luego.
00:30:28
- Idioma/s:
- Autor/es:
- Mario S.
- Subido por:
- Mario S.
- Licencia:
- Dominio público
- Visualizaciones:
- 107
- Fecha:
- 9 de julio de 2024 - 11:15
- Visibilidad:
- Público
- Centro:
- IES VILLABLANCA
- Duración:
- 00′ 04″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 69.42 MBytes