INDEX COURSE 1. Backend, Creating the server: 04:08 2. Mysql Connection using pool: 31:55 3. Views (Template Engine): 53:28 4. Saving Data in Mysql: 01:10:26 5. Retrieving Data from Mysql: 01:17:35 6. Deleting Data from Mysql: 01:33:47 7. Updating Data from Mysql: 01:40:58 8. Connect-flash Messages and Navigation: 01:53:27 9. Users Signup: 02:11:28 10. Users Signin or Login: 02:50:56 11. Protecting Routes from the Server: 03:12:12 12. Personal Data: 03:31:05 INDICE DEL TUTORIAL 1. Backend, Creando el servidor: 04:08 2. Mysql, Conexión: 31:55 3. Views (Template Engine): 53:28 4. Guardar datos en Mysql: 01:10:26 5. Obteniendo Datos desde Mysql: 01:17:35 6. Eliminando Datos de Mysql: 01:33:47 7. Actualizar Datos de Mysql: 01:40:58 8. Mensajes de connect-flash y navegación: 01:53:27 9. Registro de Usuarios en Mysql: 02:11:28 10. Login de Usuarios en Mysql: 02:50:56 11. Protegiendo Rutas del servidor: 03:12:12 12. Datos Privados: 03:31:05
Fazt porque te avientas el videotete? Osea no es una crítica? Pero porque? La duda? Para ti para monetizar no es mejor vídeos cortos? Como los que le dan like/vista/suscripctor creo que también es mejor por vídeos cortos puedo acceder a una parte un tema alguna duda, no se además no sé si pasa a muchos pero cuando alguien ve un vídeo con más de cuatro líneas amarillas (anuncios) en el vídeo da un poco de hueva ver el vídeo a mí me pasa eso , tus vídeos son buenos pero alguien que apenas le entra le dará hueva es pregunta/ sugerencia
@@victorgiovannibeltranrodri1047 concuerdo contigo ..lo mejor seria q lo haga en videos cortos ..a mk tmb me sucede lo mismo con eso de ver un video de 3 horas y ccomo que me da hueva
@@victorgiovannibeltranrodri1047 Creo que da igual y es mucho mejor verlo así. Digo por experiencia... los vídeos cortos me cansan y muchos proyectos prueba no los termino por lo cansón que resulta estar viendo uno por uno los vídeos.
20:53 para los que esten trabajando con common js, el objeto handlebars deben registrarlo como { engine } y no como exphbs, esto es por si les da algun error. Por cierto, muchas gracias fazt por el tutorial!
@@kuroDx Hola Elmer, en efecto, ese mismo error me daba a mi, al parecer han cambiado la sintaxis, porque solo me funciono importandolo como { engine } y usandolo como engine en la funcion. Por cierto, es importante las {} rodeandolo cuando lo importas.
Si alguien tiene problemas para cerrar la sesión (3:20:14) lo que pasa es que la función logout cambio y ahora es una función asíncrona por lo cual, para que funcione debe estar algo asi: router.get("/logout", (req, res, next) => { req.logOut(req.user, err => { if(err) return next(err); res.redirect("/signin"); }); });
@@PatriotaMex de echo, hasta tiene "minicursos" que son como de 3 horas, de varios frameworks, ahí puedes checar eso de manera general. Si no te basta, entonces busca o compra un curso más profundo.
@@PatriotaMex pues es obvio, no es como te vaya a enseñar a usar MySQL, Javascript, CSS, Bootstrat4 y el resto de tecnologías con todas las bases en un solo video de 3 horas. ._.
@@camiloandresruizbernal6758 eso es obvio mi retraído amigo, yo me refiero a las configuraciones del tema principal que es la configuración de los archivos de nodejs, solamente eso.
"ok, y asi hemos terminado nuestra aplicacion del dia de hoy", yo llevo dos semanas! jajaja pero al fin, termine!; muchas gracias @fazt por este curso, estuvo genial
yo me tome 3 casi 4 semanas!! mas de una vez toco revisar todo el codigo por que se iba una coma donde iba punto y cosas asi pequeñas que me jodian toda la app!!
Estoy aprendiendo programacion por mi cuenta (sin universidad ni profesores), soy una principiante que tiene conocimientos basicos de JavaScript y que ni siquiera conoce del todo la tecnologia nodejs, sin embargo, me animo a aventurarme con proyectos como estos porque siento que logro crecer mejor y de forma mas direccionada. Gracias por tus grandes tutoriales tan geniales, seria genial que hicieras un video acerca de como aprendes la programacion y de donde obtienes fuente de conocimiento para adquirir tales conocimientos y especializarte tan bien. Excelente canal y muchas gracias por todo!
yo estoy en un instituto y tambien hago proyectos asi con youtube , de echo diria q manejas asi con proyectos de la vida real y asi vas mas practicando ✌✌
Genial, impecable forma de enseñar. De verdad, muchas gracias por tan excelente tutorial! Algo necesario sería evitar que un nuevo usuario se registre con el mismo username de otro usuario. Esto se puede prevenir con dos cambios, que coloco aquí en caso de que puedan servir de utilidad a alguien más: En mysql: USE database_links; ALTER TABLE users ADD CONSTRAINT user_info UNIQUE (username); Si alguien intenta registrar un username que ya existe, entonces se genera un error 'ER_DUP_ENTRY', que se puede manejar así: Dentro del archivo lib/passport.hbs , en lugar de newUser.password = await helpers.encryptPassword(password); const result = await pool.query('INSERT INTO users SET ?', [newUser]); console.log('The database New User insertion results in: ', result); newUser.id = result.insertId; return done(null, newUser); se coloca este try-catch: try { newUser.password = await helpers.encryptPassword(password); const result = await pool.query('INSERT INTO users SET ?', [newUser]); console.log('The database New User insertion results in: ', result); newUser.id = result.insertId; return done(null, newUser); } catch (err) { if (err.code === 'ER_DUP_ENTRY') { return done(null, false, req.flash('message', 'The Username that you selected is already in use, please choose a different Username')); } }
Este y unos cuantos programadores más merecen todo lo bueno que haya en el mundo, la forma en que transmiten su conocimiento sin ningún compromiso y enseñan al resto de personas que inician en este mundo de la programación, es de admirar. Muchas gracias por tus grandes aportes!!
excelente vídeo, no se como hace para tener en mente tantos lenguajes es un duro... si alguien esta en windows y no le carga el comando mysql en la carpeta del proyecto, solo tiene que modificar las variables del sistema y agregar en las variables de entorno la ruta de mysql por lo general es C:\Program Files\MySQL\MySQL Server 8.0\bin. tal vez le sirva a alguien...a demas si tienes otras instancias en la base de datos u otros esquemas "schemas" verificar bien el puerto port: y el password.
nono, sos el tipo mas genio que conoci en youtube!! lo que me salvaste esta ultima semana con estos proyectos con node y express, no te das una idea, nuevo suscriptor y futuro recomendador de tu canal!! tremendo trabajo! y gracias por compartir todos tus conocimientos!
Increíble. Como agradecerte Fazt. Eres increíble. Ninguna plataforma de programación paga es mejor que este canal. Aquí se aprende de verdad. Muchas gracias. Cuando empiece a ganar dinero te prometo que te voy a donar algo en forma de agradecimiento. Saludos
Muy buen tutorial, me agrada que no eliminas los pequeños errores que pueden surgir durante el desarrollo, lo hace ver mucho más real y puedes ver cómo se solucionan los problemas revisando la documentación.
primero quiero darte las gracias por este magnifico tutorial.....Tengo 35 años y deje el oficio de programador por otra rama de ingeniería, y por cosas de la vida e regresado a esto, y estoy aprendiendo a la par java con spring boot y nodejs-express y solo puedo decir oh boy!!!! las cosas han cambiado mucho. Lo mas difícil de trabajar con spring y nodejs es la configuración de tu zona de trabajo en realidad me perdí mucho en eso.
2:02:38 Si alguien tiene problemas para implementar el boton de cerrar, hasta la fecha en bootstrap 5 es asi En la doc de bootstrap dice q el atributo es data-dismiss, pero a mi me funciono con data-bs-dismiss
Yo sinceramente me alegro contigo. La manera como explicas y compartes tu conocimiento. Consigo aprender todo lo que explicas. Tus clases tienen un nivel alto ... Congratulations brother. Muito obrigado !
Eres un gran desarrollador. Personas como tu merece que las personas que visitan tu canal y valoren tu trabajo aporten un poco de tu tiempo convertido en dinero, esta app que creaste usando tecnologia open source es maravillosa. Implica muchos temas complejos...
Muchas gracias por compartir tu conocimiento! He aprendido un montón con este tutorial, muy bien explicado y muy completa la app. Además, 100% práctico, ideal para quienes saben programar pero no conocen NODE. Recomendadísimo! Saludos y sigue así!
Quiero felicitarte por lo ordenado que trabajas. La excelente memoria que tienes. Eres demasiado bueno programando, en mucho tiempo que tengo tratando de aprender específicamente lo que has puesto aquí, que considero el mejor video que he visto hasta los momentos, porque vas al grano sin titubeos y con total conocimiento y propiedad. De verdad me quito el sombrero ante su maestría.
6 ปีที่แล้ว +29
Excelente Fazt, siempre algo nuevo, ahora ( Nodejs y Mysql ), juntos, jejeje, eres super. Muchas gracias por compartir estos conocimientos y tu forma de explicar tan buena que entendemos de forma simple. Muchas gracias. y Feliz Noche buena. Muchas cosas buenas para ti.
Tuve algunas dificultades con la implementación de la librería connect-flash. Seguramente es por actualizaciones. La solución la encontré en ChatGPT, le pasé contexto (el bloque de código completo, descripción del error, etc) y me resolvió el problema en 3 pasos. Gracias totales Fazt!
Amigo eres el mejor y sin bromas, yo he visto muchos programadores haciendo Videos pero como tu ninguno, tienes una forma de explicarlo muy bien y detallado. La verdad es que tendrías que ganar dinero por esto. Un saludo desde Kassel (el país de las patatas)
Si alguien tuvo problemas al redireccionar al SignIn cuando intentaba entrar al Profile Section, por que la funcion IsAuthenticated is undefined, en el tiempo 03:22:10 . Sugiero cambiar un codigo en el archivo authentication.js cuando creamos la ruta Get '/profile' cambiarla por el siguiente codigo: router.get("/profile", (req, res) => { if (req.user === undefined) { res.redirect("/signin"); } else res.render("profile"); }); Obviamente no creamos la funcion isLoggedIn, si no que esperamos que el req devuelva un usuario (en la comprobacion del If) si no es el caso entonces rendireccionamos a /signin. Espero les sea de utilidad
@Keyver Nieves holas.. sabes tengo un problema con el signin... Los mesajes de error se muestran.. pero cuando pongo bien los datos tanto el usuario y la clave.. me sigue apareciendo clave incorrecta.. :(
@@virginiafredes4744 me parece que estás comparando la contraseña con el Hash que está guardado en la BD, tienes que usar la función compare. No sé si sea tu caso
2023. Todo funcionando correctamente, me sorprende que a pesar de que este tutorial se haya subido en 2018 el código aun funcione, claro se me presentaron varios errores pero los logre solucionar (sin cambiar tanto el código) y llegar al final del tutorial. Fazt, Gracias a tus videos e aprendido muchas cosas, sigue así que me gustaría seguir aprendiendo con tus tutoriales.
Para error en min 20:50 En lugar de requerir handlebars de la forma: - const exphbs = require('express-handlebars'); Tenes que hacerlo de la forma: -const {engine} = require('express-handlebars'); Y despues cuando configuras el motor en app.engine pone: app.engine('.hbs', engine({ (y aca pones toda la configuracion del motor que esta en el video) }));
tienen que escribir const { engine } = require('express-handlebars'); en lugar de const exphbs = require('express-handlebars'); y en lugar de app.engine('.hbs', exphbs({ defaultLayout: 'main', layoutsDir: path.join(app.get('views'), 'layouts'), partialsDir: path.join(app.get('views'), 'partials'), extname: '.hbs', helpers: require('./lib/handlebars') })) solo cambiar exphbs por engine app.engine('.hbs', engine({ defaultLayout: 'main', layoutsDir: path.join(app.get('views'), 'layouts'), partialsDir: path.join(app.get('views'), 'partials'), extname: '.hbs', helpers: require('./lib/handlebars') }))
Te amo Fazt, literalmente siento cariño por vos después de tantas horas de mi vida invertidas en tus videos jaja. Saludos y gracias. Por otro lado me gustaría consultar tu distro de linux y si tienes algún video con tus config o "customización" del mismo. Felices fiestas!
xD Gracias, esta distro se llama Linux Lite, esta basada en Ubuntu, asi que puedes hacer todo lo de allí, pero esta distro consume muchos menos, así que para desarrollo me gusta mucho, sobre todo cuando ejecutas muchos programas a la vez, editores, maquinas virtuales, IDEs, transpiladores y demas. Creo que seria una buena idea crear un video explicando como configuro una distro nueva :)
amigo una pregunta estoy en windows y siempre tengo problemas con la consola cuando pongo mysql no me reconoce apesar de que tengo instalado xampp y tambien mysql como lo hiciste ayuda
Hola @@MiguelBaena5 No explicas cuál es el problema con mysql. Pero sospecho, revisaste las variables de entorno. Debes agregar, la ruta de mysql, a las variables de entorno. Revisa eso. Saludos.
Mi primera vez en este canal, y es increíble lo fácil que resulta entender cada concepto aplicado en esta app, personalmente utilicé y adapté esto para el proyecto de un cliente y fue el único video que tuve que ver para desarrollarla por completo.
A los que tengan problemas con ECONNREFUSED, hay muchas razones por las que el código en este tutorial podría fallar, yo lo resolví agregando el puerto de mysql, el default es 3306 pero en mi caso el puerto era 3307 cuando lo consulté en mi interfaz, una vez que lo agregué, ya se conectaba sin problemas. Esto lo agregas en el archivo keys, donde está la información para acceder a la base de datos.
La verdad que este proyecto es completísimo. Ir pausando, anotando, buscando más sobre lo que vas mostrando, me sumó muchísimo para entender un poquito más este tema de la progamación web. Gracias!
Mis suscripciones me sobran en una mano, pero por la grandeza de tus cursos, tu manera de explicar, yendo directamente a los temas sin marear a la gente, tu eres una de mis suscripciones. Excelente, de más de 30 cursos que he visto, no hay duda que los tuyos son los mejores CON DIFERENCIA!!
profesor, de esta misma manera es que nos gustaría que nos explicaras de manera muy sencilla y basico, los framework ya sea React, Vuejs, Angular y no siempre crear un crud y listo. osea crear un crud no es que este mal si no que hace falta 2 temas muy importante aparte de un crud y es crear un login y Proteger Rutas del servidor. a cuantos nos no hubieras gustado mas, en esos cursos que tiene que explica los stack de MEVN, MERN, MEAN, si le hubieras añadido estos 2 temas el del login y proteger rutas hubieras sido el curso perfecto. por que crear una aplicación web sea con cualquiera stack siempre va tener login, y protección de rutas y crud. Ojala lo tengas en cuenta para proximos tutoriales cuando quieras explicar algun stack. que aparte de explicarnos a crear un crud ahi mismo también nos explique a crear login y proteger rutas. se lo agradecería mucho
para todos los que sigan el video al momento de importar el modulo express-mysql-session la linea para que funcione deben colocarla asi const MySQLStore = require("express-mysql-session")(session);
llevo medio día y por fin me sale "hola mundo" muy bueno el vídeo, me gusta cuando empiezas algo y lo dejas terminado, sin importar el tiempo que te tardes.
Para todos los que les paso el error 'TypeError: exphbs is not a function' lo único que tienes que hacer es cambiar la linea de código donde se importo el "express-handlebars" cambiarla por esta "const { engine } = require('express-handlebars');" (sin las comillas) y seguido cambiar en el 'app.engine' cambiar el 'exphbs' por 'engine'
En las mismas, lo solucione con ponerle "=>" , pero mas adelante es imposible continuar ya que en ''links'' ya no deja realizar el render de platilla. Gracias @Ryan Navarro
Sos el mejor ser humano que pisó este canal jajaaj llevaba buscando muchísimo y no encontraba la forma, hasta intenté cambiar de motor de plantillas pero nada, ¡GRACIAS!
Fazt me llevas a otro nivel men. Gracias, bro. No suelo hacerlo, pero debo hacerlo. Aun en este año y todo sirve, hay que leer algunos documentos que han actualizado o los comentarios. Gracias
Impresionante tutorial. Varias veces tuve que revisar si la velocidad de reproducción del video no estaba al 1.5x o 2x, muy muy ágil el ritmo. Cada minuto se me hacía como 5 en lo que entendía y codificaba, pero vale mucho la pena. Felicidades por ese entusiasmo @Fazt. Sería un tutorial completamente redondo si hubieras incluido el deployment en un server, pero de cualquier forma, excelente tu trabajo y dedicación.
1:31:37 Cuidado con el campo "created_at timestamp NOT NULL DEFAULT current_timestamp" generado automático desde base de datos. Ya estando en producción, el servidor tomará su propia fecha, que no necesariamente coincidirá con la del usuario, y por lo cual el timeago mostrará datos incorrectos. Lo ideal sería tomar la fecha que tiene el cliente al momento de la creación del registro.
@@davinchocamaron646 En el 1:14:45 habría que crear una variable que almacene la fecha y hora del usuario usando new Date(), y luego agregarla al objeto newLink. Algo así: const {title, url, description} = req.body; const created_at = new Date(); const newLink = { title, url, description,created_at, user_id: req.user.id };
Si a alguien le aparece el error ER_NOT_SUPPORTED_AUTH_MODE Es muy probable que la versión del MySQL sea 8.0 y está versión trae un modo de autenticación predeterminado que aún no es compatible con esta biblioteca. Se soluciona de la siguiente forma: 1. Vas a MySQL y escribes la siguiente línea de código: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'escribe la contraseña'; Espero sea de su ayuda 😄
me sale Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password: YES), segun lei debo poner eso para cambiar la clave de mysql pero tengo mysql solo en la consola, al intentar poner eso me sale otro error, RROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'BY 'aÑsñ//or2*343s'' at line 1...
@@mesac1988 encontre la solucion y no fue eso xque hasta copie y pegue el codigo, no se bien el xque del error pero tenia sqlServer y mysql instalados, al desinstalar sqlServer y toda su info me anduvo, parece que se interponian los datos op algo asi
Me salvaste la vida, estuve como 2 horas probando otros paquetes como connect-session-sequelize o connect mysql2, porque encima yo no uso el paquete mysql sino mysql2 que es más moderno y seguro y pensaba que eso tenía algo que ver. muchas graciasssssss
amigo una pregunta estoy en windows y siempre tengo problemas con la consola cuando pongo mysql no me reconoce apesar de que tengo instalado xampp y tambien mysql como lo hiciste ayuda
Puedes configurar las variables de entorno para que no se vea tu base de datos en el código y mas importante, manejar los errores. Ya si lo consideras necesario puedes usar transacciones en las rutas por si quieres usar el ejemplo como molde para tu propio proyecto.
Llevo SEMANAS buscando un tutorial que me sirva y encontré el adecuado, vieras que chingón se sintió que mandara datos correctamente a la bd :'DD ERES EL MEJOR!!! Un cálido abrazo desde México, amigo.
@@cristianjaimes9951 si bro, la única solución fue empezar todo desde el inicio y me di cuenta de algunos errores que había cometido en el código, también había instalado el NodoJS LTD y no el Actual por lo que me toco instalar de nuevo el NodoJS. Saludos!
Estoy en la misma situación, parece que la función pool.query( [lenguaje sql], callback function) necesita afuerzas una funcion callback... definir en caso de error
@@elbrusbaskaev483 alguien pregunto en stackoverflow, y le respondieron bien. Hice lo que indicaron y funcionó todo, mas no entiendo bien la cuestion de las promesas. es.stackoverflow.com/questions/266927/error-en-almacenar-datos-con-mysql-y-node-js?newreg=02f0dbad8ecb48b08498a79e01aeb3b7
TE AMOOOOOOOOOOOO, pude hacer mi aplicacion usando oracle en vez de mysql y me salte los comentarios flash, por que son de mysql, y todo lo demas me fue de perlas, aunque si me arrojaba un error al momento de guardar datos en la sesion, eso lo resolvi importando unas cookies y creando mas arriba de app.use(session()); otra sesion que es la misma que el hizo donde esta guardando secret, resave y saveUnitialized
Tengo un problema con la vista profile.hbs, cuando añado {{user.fullname}} o {{user.username}} no me lo muestra por pantalla en la vista /profile, lo he puesto en las variables globales pero nada. ¿Llevo unas 4 horas intentando ver cuál es el error, pero aparentemente está todo bien, alguien me podría ayuda? Gracias.
En el archivo index.js asegurate de que las lineas "app.use(passport.initialize());" y "app.use(passport.session());" esten en la sección de "Middlewares", o sea antes de la sección de "//global variables", que es donde se encuentra esta linea: "app.locals.user = req.user;"
@@ThePablocaleb En el archivo index.js asegurate de que las lineas "app.use(passport.initialize());" y "app.use(passport.session());" esten en la sección de "Middlewares", o sea antes de la sección de "//global variables", que es donde se encuentra esta linea: "app.locals.user = req.user;"
eso esta interesante para aventurarte de manera autodidacta, no es tan distinto de esto. Te lo recomiendo, eso hice yo y aprendes mas solo, una vez que tienes una base como la de este video que siguiendo videos tutoriales para cada cosa que quieres hacer
@@luisdavidecheverria8281 Osea en ves de llamar a las vistas de los archivos handlebars, llamo a las vistas de los archivos que están dentro de la carpeta con el front en react ?
@@lionelojeda2593 tiens que instalar cors, y abrir en un puerto diferente el react y en otro le servidor, mirate el reciente video de fazt donde hace el stack MERN
Gente! Aca 2023! Tuve muchos problemas a la hora de seguir este magnífico tutorial ya que muchos módulos cambiar.. pero luego de tanto buscar pude encontrar todas las soluciones!! Así que si tienen dudas pregunten! Gracias fatz!
hola bro, como hiciste en el final con el user_id, por que yo lo hice tal cual, me permite agregar el link con total normalidad, pero cuando voy a "All links" no me muestra nada, como si no tuviera, y en realidad están creados en la base de datos.
Nunca antes vi completo un video tan largo en YT! jaja... De principio a fin, excelentes explicaciones y mucha información. A veces tenia que poner la velocidad a 0.75 para seguirte pero igual me gustó mucho. Seguiré más tutoriales tuyos! Gracias por el enorme esfuerzo! Like y Suscripto!
luego de un mes recien terminé el video XD bueno fui viendo el video y lo iba modificando a un sistema de examenes (como trabajo final de la universidad) donde hay profesores, estudiantes, los profesores pueden crear preguntas y los estudiantes pueden tomar examen, la verdad que sin tu video hubiera sido imposible avanzar por mi cuenta, por ese detalle te agradezco. Orgullo Peruano FAZT
Muy bien Fazt. Excelente trabajo. Tienes muy buen conocimiento de estas herramintas. Felicitaciones.Muchas gracias por compartirlo. Que avances continuamente y logres TODO lo que quieras. Eso te lo devuelve la Vida por compartir.
Excelente vídeo. Sin desperdicio cada minuto. Ágil, excelentemente explicado. Entre sin saber nada de nodejs y ya tengo una aplicación base completa y funcional.
Fantastico, muchas gracias por este video me ha ayudado mucho a comprender como funcionan estas tecnologias, ademas me ha animado a extrapolar esta app para mis cosas con vue. Muchas gracias.
INDEX COURSE
1. Backend, Creating the server: 04:08
2. Mysql Connection using pool: 31:55
3. Views (Template Engine): 53:28
4. Saving Data in Mysql: 01:10:26
5. Retrieving Data from Mysql: 01:17:35
6. Deleting Data from Mysql: 01:33:47
7. Updating Data from Mysql: 01:40:58
8. Connect-flash Messages and Navigation: 01:53:27
9. Users Signup: 02:11:28
10. Users Signin or Login: 02:50:56
11. Protecting Routes from the Server: 03:12:12
12. Personal Data: 03:31:05
INDICE DEL TUTORIAL
1. Backend, Creando el servidor: 04:08
2. Mysql, Conexión: 31:55
3. Views (Template Engine): 53:28
4. Guardar datos en Mysql: 01:10:26
5. Obteniendo Datos desde Mysql: 01:17:35
6. Eliminando Datos de Mysql: 01:33:47
7. Actualizar Datos de Mysql: 01:40:58
8. Mensajes de connect-flash y navegación: 01:53:27
9. Registro de Usuarios en Mysql: 02:11:28
10. Login de Usuarios en Mysql: 02:50:56
11. Protegiendo Rutas del servidor: 03:12:12
12. Datos Privados: 03:31:05
Fazt porque te avientas el videotete? Osea no es una crítica? Pero porque? La duda? Para ti para monetizar no es mejor vídeos cortos? Como los que le dan like/vista/suscripctor creo que también es mejor por vídeos cortos puedo acceder a una parte un tema alguna duda, no se además no sé si pasa a muchos pero cuando alguien ve un vídeo con más de cuatro líneas amarillas (anuncios) en el vídeo da un poco de hueva ver el vídeo a mí me pasa eso , tus vídeos son buenos pero alguien que apenas le entra le dará hueva es pregunta/ sugerencia
@@victorgiovannibeltranrodri1047 concuerdo contigo ..lo mejor seria q lo haga en videos cortos ..a mk tmb me sucede lo mismo con eso de ver un video de 3 horas y ccomo que me da hueva
se puso rudo el input type URL XD
@@victorgiovannibeltranrodri1047 Creo que da igual y es mucho mejor verlo así. Digo por experiencia... los vídeos cortos me cansan y muchos proyectos prueba no los termino por lo cansón que resulta estar viendo uno por uno los vídeos.
Que crac, que grande se aprende mucho más que en la universidad
20:53 para los que esten trabajando con common js, el objeto handlebars deben registrarlo como { engine } y no como exphbs, esto es por si les da algun error. Por cierto, muchas gracias fazt por el tutorial!
a mi me sale este error "TypeError: exphbs is not a function" si lo cambio como engine sigue saliendo. sabras que es bro?
@@kuroDx Hola Elmer, en efecto, ese mismo error me daba a mi, al parecer han cambiado la sintaxis, porque solo me funciono importandolo como { engine } y usandolo como engine en la funcion. Por cierto, es importante las {} rodeandolo cuando lo importas.
@@ernestoalonso5565 muchas gracias!!!! Si era éso. Lo cambie con los { } y ya funciona bien.
jaja todos tuvimos ese erorr. Gracias bro!!
Podrías agregar la sintaxis please!!??
Si alguien tiene problemas para cerrar la sesión (3:20:14) lo que pasa es que la función logout cambio y ahora es una función asíncrona por lo cual, para que funcione debe estar algo asi:
router.get("/logout", (req, res, next) => {
req.logOut(req.user, err => {
if(err) return next(err);
res.redirect("/signin");
});
});
gracias por el debugging Luis estaba detenido ahi.
Heroe
Genio
Te mereces el cielo bro :3
garcias bro ufff, lo bueno q es ver loscomentarios
He visto canales de programación, pero tengo por seguro que este es el MEJOR! Explicas cosas que otros canales no lo hacen... Sigue así men!!
Claro que no. No explica muchas de las configuración por que se hacen de tal o cual manera...
@@PatriotaMex Investigue. El curso es muy completo !
@@PatriotaMex de echo, hasta tiene "minicursos" que son como de 3 horas, de varios frameworks, ahí puedes checar eso de manera general.
Si no te basta, entonces busca o compra un curso más profundo.
@@PatriotaMex pues es obvio, no es como te vaya a enseñar a usar MySQL, Javascript, CSS, Bootstrat4 y el resto de tecnologías con todas las bases en un solo video de 3 horas. ._.
@@camiloandresruizbernal6758 eso es obvio mi retraído amigo, yo me refiero a las configuraciones del tema principal que es la configuración de los archivos de nodejs, solamente eso.
"ok, y asi hemos terminado nuestra aplicacion del dia de hoy", yo llevo dos semanas! jajaja pero al fin, termine!; muchas gracias @fazt por este curso, estuvo genial
yo me tome 3 casi 4 semanas!! mas de una vez toco revisar todo el codigo por que se iba una coma donde iba punto y cosas asi pequeñas que me jodian toda la app!!
Como se llama para darle una observación
Estoy aprendiendo programacion por mi cuenta (sin universidad ni profesores), soy una principiante que tiene conocimientos basicos de JavaScript y que ni siquiera conoce del todo la tecnologia nodejs, sin embargo, me animo a aventurarme con proyectos como estos porque siento que logro crecer mejor y de forma mas direccionada. Gracias por tus grandes tutoriales tan geniales, seria genial que hicieras un video acerca de como aprendes la programacion y de donde obtienes fuente de conocimiento para adquirir tales conocimientos y especializarte tan bien. Excelente canal y muchas gracias por todo!
yo estoy en un instituto y tambien hago proyectos asi con youtube , de echo diria q manejas asi con proyectos de la vida real y asi vas mas practicando ✌✌
Genial, impecable forma de enseñar. De verdad, muchas gracias por tan excelente tutorial!
Algo necesario sería evitar que un nuevo usuario se registre con el mismo username de otro usuario. Esto se puede prevenir con dos cambios, que coloco aquí en caso de que puedan servir de utilidad a alguien más:
En mysql:
USE database_links;
ALTER TABLE users ADD CONSTRAINT user_info UNIQUE (username);
Si alguien intenta registrar un username que ya existe, entonces se genera un error 'ER_DUP_ENTRY', que se puede manejar así: Dentro del archivo lib/passport.hbs , en lugar de
newUser.password = await helpers.encryptPassword(password);
const result = await pool.query('INSERT INTO users SET ?', [newUser]);
console.log('The database New User insertion results in: ', result);
newUser.id = result.insertId;
return done(null, newUser);
se coloca este try-catch:
try {
newUser.password = await helpers.encryptPassword(password);
const result = await pool.query('INSERT INTO users SET ?', [newUser]);
console.log('The database New User insertion results in: ', result);
newUser.id = result.insertId;
return done(null, newUser);
} catch (err) {
if (err.code === 'ER_DUP_ENTRY') {
return done(null, false, req.flash('message', 'The Username that you selected is already in use, please choose a different Username'));
}
}
Excelente aporte.
Este y unos cuantos programadores más merecen todo lo bueno que haya en el mundo, la forma en que transmiten su conocimiento sin ningún compromiso y enseñan al resto de personas que inician en este mundo de la programación, es de admirar. Muchas gracias por tus grandes aportes!!
¡Gracias!
palabra para describirte ===GENIOOOOOO, GRACIAS INFINITAS, TE AMAMOSSS!!!
excelente vídeo, no se como hace para tener en mente tantos lenguajes es un duro... si alguien esta en windows y no le carga el comando mysql en la carpeta del proyecto, solo tiene que modificar las variables del sistema y agregar en las variables de entorno la ruta de mysql por lo general es C:\Program Files\MySQL\MySQL Server 8.0\bin. tal vez le sirva a alguien...a demas si tienes otras instancias en la base de datos u otros esquemas "schemas" verificar bien el puerto port: y el password.
Cuando voy por el minuto 18:05 me arroga un error de Error: listen EADDRINUSE: address already in use :::4000 en la consola y no me muestra el puerto
solumobil.com
nono, sos el tipo mas genio que conoci en youtube!! lo que me salvaste esta ultima semana con estos proyectos con node y express, no te das una idea, nuevo suscriptor y futuro recomendador de tu canal!! tremendo trabajo! y gracias por compartir todos tus conocimientos!
Increíble. Como agradecerte Fazt. Eres increíble. Ninguna plataforma de programación paga es mejor que este canal. Aquí se aprende de verdad. Muchas gracias. Cuando empiece a ganar dinero te prometo que te voy a donar algo en forma de agradecimiento. Saludos
Sos genio fazt, hace cinco días no deje de aprender node.js express y más. Gracias
Muy buen tutorial, me agrada que no eliminas los pequeños errores que pueden surgir durante el desarrollo, lo hace ver mucho más real y puedes ver cómo se solucionan los problemas revisando la documentación.
primero quiero darte las gracias por este magnifico tutorial.....Tengo 35 años y deje el oficio de programador por otra rama de ingeniería, y por cosas de la vida e regresado a esto, y estoy aprendiendo a la par java con spring boot y nodejs-express y solo puedo decir oh boy!!!! las cosas han cambiado mucho. Lo mas difícil de trabajar con spring y nodejs es la configuración de tu zona de trabajo en realidad me perdí mucho en eso.
2:02:38 Si alguien tiene problemas para implementar el boton de cerrar, hasta la fecha en bootstrap 5 es asi
En la doc de bootstrap dice q el atributo es data-dismiss, pero a mi me funciono con data-bs-dismiss
Don Fazt no me canso de decirlo. Ud es grande . Antes mi mina me quitaba el sueño ahora lo hacen sus tutoriales , que grande !!!!
Yo sinceramente me alegro contigo. La manera como explicas y compartes tu conocimiento. Consigo aprender todo lo que explicas. Tus clases tienen un nivel alto ... Congratulations brother. Muito obrigado !
Eres un gran desarrollador. Personas como tu merece que las personas que visitan tu canal y valoren tu trabajo aporten un poco de tu tiempo convertido en dinero, esta app que creaste usando tecnologia open source es maravillosa. Implica muchos temas complejos...
Muchas gracias por compartir tu conocimiento! He aprendido un montón con este tutorial, muy bien explicado y muy completa la app. Además, 100% práctico, ideal para quienes saben programar pero no conocen NODE.
Recomendadísimo!
Saludos y sigue así!
Quiero felicitarte por lo ordenado que trabajas. La excelente memoria que tienes. Eres demasiado bueno programando, en mucho tiempo que tengo tratando de aprender específicamente lo que has puesto aquí, que considero el mejor video que he visto hasta los momentos, porque vas al grano sin titubeos y con total conocimiento y propiedad. De verdad me quito el sombrero ante su maestría.
Excelente Fazt, siempre algo nuevo, ahora ( Nodejs y Mysql ), juntos, jejeje, eres super. Muchas gracias por compartir estos conocimientos y tu forma de explicar tan buena que entendemos de forma simple. Muchas gracias. y Feliz Noche buena. Muchas cosas buenas para ti.
solumobil.com
Tuve algunas dificultades con la implementación de la librería connect-flash. Seguramente es por actualizaciones. La solución la encontré en ChatGPT, le pasé contexto (el bloque de código completo, descripción del error, etc) y me resolvió el problema en 3 pasos. Gracias totales Fazt!
Y aun, despues de tanto tiempo, es un excelente video y aprendi muchisimo observandolo, muchas gracias Fazt, por compartir tu conocimiento.
Inmejorable tutorial, muy bien el dividirlo en partes, tanto conocimiento metidos en 4 horas es increible. Muchas gracias!!!!!!!!!!!!!!!!!!!
Amigo eres el mejor y sin bromas, yo he visto muchos programadores haciendo Videos pero como tu ninguno, tienes una forma de explicarlo muy bien y detallado. La verdad es que tendrías que ganar dinero por esto.
Un saludo desde Kassel (el país de las patatas)
de Hector de León no vas a estar hablando! jajajajaja, pero tienes razon en éso
Sos un Capo. Pocos tienen la capacidad de enseñar tan claro. Felicitaciones.
Si alguien tuvo problemas al redireccionar al SignIn cuando intentaba entrar al Profile Section, por que la funcion IsAuthenticated is undefined, en el tiempo 03:22:10 . Sugiero cambiar un codigo en el archivo authentication.js cuando creamos la ruta Get '/profile' cambiarla por el siguiente codigo:
router.get("/profile", (req, res) => {
if (req.user === undefined) {
res.redirect("/signin");
} else res.render("profile");
});
Obviamente no creamos la funcion isLoggedIn, si no que esperamos que el req devuelva un usuario (en la comprobacion del If)
si no es el caso entonces rendireccionamos a /signin.
Espero les sea de utilidad
@Keyver Nieves holas.. sabes tengo un problema con el signin... Los mesajes de error se muestran.. pero cuando pongo bien los datos tanto el usuario y la clave.. me sigue apareciendo clave incorrecta.. :(
@@virginiafredes4744 me parece que estás comparando la contraseña con el Hash que está guardado en la BD, tienes que usar la función compare. No sé si sea tu caso
@@Kyevnieves si.. estoy usando el compare.. pero sigue igual. .(
passport.use('local.signin', new LocalStrategy({
usernameField: 'username',
passwordField: 'password',
passReqToCallback: true
}, async (req, username, password, done) => {
const rows = await pool.query('SELECT * FROM users WHERE username = ?', [username]);
if (rows.length > 0) {
const user = rows[0];
const validPassword = await helpers.matchPassword(password, user.password)
if (validPassword) {
done(null, user, req.flash('success', 'Welcome ' + user.username));
} else {
done(null, false, req.flash('message', 'Incorrect Password'));
}
} else {
return done(null, false, req.flash('message', 'The Username does not exists.'));
}
}));
y el metodo matchPasword lotengo asi
helpers.matchPassword = async (password, savePassword)=>{
try {
return await bcript.compare(password, savePassword);
} catch (error) {
cosole.log(error);
}
};
@@virginiafredes4744 y el error en consola que dice
gracias me sirvió 😄
2023. Todo funcionando correctamente, me sorprende que a pesar de que este tutorial se haya subido en 2018 el código aun funcione, claro se me presentaron varios errores pero los logre solucionar (sin cambiar tanto el código) y llegar al final del tutorial.
Fazt, Gracias a tus videos e aprendido muchas cosas, sigue así que me gustaría seguir aprendiendo con tus tutoriales.
Para error en min 20:50
En lugar de requerir handlebars de la forma:
- const exphbs = require('express-handlebars');
Tenes que hacerlo de la forma:
-const {engine} = require('express-handlebars');
Y despues cuando configuras el motor en app.engine pone:
app.engine('.hbs', engine({
(y aca pones toda la configuracion del motor que esta en el video)
}));
gracias
gracias
app.use(require('./routes/authenticacion')) pudiste arreglar este error?
tienen que escribir
const { engine } = require('express-handlebars');
en lugar de
const exphbs = require('express-handlebars');
y en lugar de
app.engine('.hbs', exphbs({
defaultLayout: 'main',
layoutsDir: path.join(app.get('views'), 'layouts'),
partialsDir: path.join(app.get('views'), 'partials'),
extname: '.hbs',
helpers: require('./lib/handlebars')
}))
solo cambiar exphbs por engine
app.engine('.hbs', engine({
defaultLayout: 'main',
layoutsDir: path.join(app.get('views'), 'layouts'),
partialsDir: path.join(app.get('views'), 'partials'),
extname: '.hbs',
helpers: require('./lib/handlebars')
}))
Fatz termine la aplicacion!!! quedo andando!! GRacias hermano, sos muy bueno explicando!
Te amo Fazt, literalmente siento cariño por vos después de tantas horas de mi vida invertidas en tus videos jaja. Saludos y gracias. Por otro lado me gustaría consultar tu distro de linux y si tienes algún video con tus config o "customización" del mismo. Felices fiestas!
xD Gracias, esta distro se llama Linux Lite, esta basada en Ubuntu, asi que puedes hacer todo lo de allí, pero esta distro consume muchos menos, así que para desarrollo me gusta mucho, sobre todo cuando ejecutas muchos programas a la vez, editores, maquinas virtuales, IDEs, transpiladores y demas. Creo que seria una buena idea crear un video explicando como configuro una distro nueva :)
@@FaztTech Leí que no soporta UEFI, y ya lo estoy descargado. Veré si puedo hacerlo bootear dual con ElementaryOS y espero no arruinar el disco jaja
amigo una pregunta estoy en windows y siempre tengo problemas con la consola cuando pongo mysql no me reconoce apesar de que tengo instalado xampp y tambien mysql como lo hiciste ayuda
Hola @@MiguelBaena5 No explicas cuál es el problema con mysql. Pero sospecho, revisaste las variables de entorno. Debes agregar, la ruta de mysql, a las variables de entorno. Revisa eso. Saludos.
@@MiguelBaena5 Abandona Windows y métete con GNU/Linux ;-)
Mi primera vez en este canal, y es increíble lo fácil que resulta entender cada concepto aplicado en esta app, personalmente utilicé y adapté esto para el proyecto de un cliente y fue el único video que tuve que ver para desarrollarla por completo.
Gracias Fazt!
A los que tengan problemas con ECONNREFUSED, hay muchas razones por las que el código en este tutorial podría fallar, yo lo resolví agregando el puerto de mysql, el default es 3306 pero en mi caso el puerto era 3307 cuando lo consulté en mi interfaz, una vez que lo agregué, ya se conectaba sin problemas. Esto lo agregas en el archivo keys, donde está la información para acceder a la base de datos.
La verdad que este proyecto es completísimo. Ir pausando, anotando, buscando más sobre lo que vas mostrando, me sumó muchísimo para entender un poquito más este tema de la progamación web. Gracias!
Alguien también acomodo su libreta, cafe y palomitas para aventarse esta excelente clase? jajajaa
Excelente Fazt!!
solumobil.com
Te felicito, te tomaste casi 4 horas de tu tiempo para ayudarnos.....gracias.
Saca patreon mereces que la gente aporte de lo que gana con lo que transmites
toda la razon
Confirmo!!!!!
x4
Completamente de acuerdo, nos esta compartiendo todo tu conocimiento sin reservas, seria una pequeña muestra de gratitud de nuestra parte
x6
Mis suscripciones me sobran en una mano, pero por la grandeza de tus cursos, tu manera de explicar, yendo directamente a los temas sin marear a la gente, tu eres una de mis suscripciones. Excelente, de más de 30 cursos que he visto, no hay duda que los tuyos son los mejores CON DIFERENCIA!!
Sensacional! Gratitud por su empenho y inteligencia! Saludos desde Brasil! :^)
Me explotó la cabeza, en algún momento podré decir que estos conocimientos son "míos". Excelente tutorial.
gracias una vez más Fazt! posiblemente tendré que usar algo así en el futuro!
PD: 1:06:49 el hombre contra la máquina, el regreso 2
puff 3 días metiendole a este video duro. xD aprendí un monton y ahora que me estoy dando cuenta ahora tengo un proyecto base. para cualquier cosa.
profesor, de esta misma manera es que nos gustaría que nos explicaras de manera muy sencilla y basico, los framework ya sea React, Vuejs, Angular y no siempre crear un crud y listo. osea crear un crud no es que este mal si no que hace falta 2 temas muy importante aparte de un crud y es crear un login y Proteger Rutas del servidor. a cuantos nos no hubieras gustado mas, en esos cursos que tiene que explica los stack de MEVN, MERN, MEAN, si le hubieras añadido estos 2 temas el del login y proteger rutas hubieras sido el curso perfecto. por que crear una aplicación web sea con cualquiera stack siempre va tener login, y protección de rutas y crud. Ojala lo tengas en cuenta para proximos tutoriales cuando quieras explicar algun stack. que aparte de explicarnos a crear un crud ahi mismo también nos explique a crear login y proteger rutas. se lo agradecería mucho
para todos los que sigan el video al momento de importar el modulo express-mysql-session la linea para que funcione deben colocarla asi const MySQLStore = require("express-mysql-session")(session);
fue la respuesta a mi error!! gracias por compartirlo
GRACIASSS !!!! 2 horas estuve buscando jajaja
Hola, en esa parte de express-mysql-sessions, flash y express-sessions, alguien tuvo este error, estuve buscando pero nada:
node:internal/modules/cjs/loader:1147
throw err;
^
Error: Cannot find module 'mongodb/node_modules/bson'
Require stack:
- D:\Repo\dizziness_syst
ode_modules\mongoose\lib\drivers
ode-mongodb-native\objectid.js
- D:\Repo\dizziness_syst
ode_modules\mongoose\lib\types\objectid.js
- D:\Repo\dizziness_syst
ode_modules\mongoose\lib\utils.js
- D:\Repo\dizziness_syst
ode_modules\mongoose\lib\schema.js
- D:\Repo\dizziness_syst
ode_modules\mongoose\lib\index.js
- D:\Repo\dizziness_syst
ode_modules\mongoose\index.js
- D:\Repo\dizziness_syst
ode_modules\express-sessions\index.js
- D:\Repo\dizziness_syst\src\index.js
at Module._resolveFilename (node:internal/modules/cjs/loader:1144:15)
at Module._load (node:internal/modules/cjs/loader:985:27)
at Module.require (node:internal/modules/cjs/loader:1235:19)
at require (node:internal/modules/helpers:176:18)
at Object. (D:\Repo\dizziness_syst
ode_modules\mongoose\lib\drivers
ode-mongodb-native\objectid.js:8:16)
at Module._compile (node:internal/modules/cjs/loader:1376:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
at Module.load (node:internal/modules/cjs/loader:1207:32)
at Module._load (node:internal/modules/cjs/loader:1023:12)
at Module.require (node:internal/modules/cjs/loader:1235:19) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'D:\\Repo\\dizziness_syst\
ode_modules\\mongoose\\lib\\drivers\
ode-mongodb-native\\objectid.js',
'D:\\Repo\\dizziness_syst\
ode_modules\\mongoose\\lib\\types\\objectid.js',
'D:\\Repo\\dizziness_syst\
ode_modules\\mongoose\\lib\\utils.js',
'D:\\Repo\\dizziness_syst\
ode_modules\\mongoose\\lib\\schema.js',
'D:\\Repo\\dizziness_syst\
ode_modules\\mongoose\\lib\\index.js',
'D:\\Repo\\dizziness_syst\
ode_modules\\mongoose\\index.js',
'D:\\Repo\\dizziness_syst\
ode_modules\\express-sessions\\index.js',
'D:\\Repo\\dizziness_syst\\src\\index.js'
]
}
gracias bro!
"Pode os colocarlo en un pedazo de código". Si, señor. Tú lo vales
Q buen video fazt, sabes demasiados módulos, podrías enseñarnos a los novatos como saber que modulo y cuando usarlo para crear aplicaciones web
apoyo este comentario
almenos, un video de los métodos más utilizados para los modulos más utilizados
Nunca les contestará. Le copia todo el contenido a otro canal. Dudo sepa programar éste muchacho.
@@osmeig6025 a que canal le copia?
@@clementedb3712 Traversy Media
llevo medio día y por fin me sale "hola mundo" muy bueno el vídeo, me gusta cuando empiezas algo y lo dejas terminado, sin importar el tiempo que te tardes.
Para todos los que les paso el error 'TypeError: exphbs is not a function'
lo único que tienes que hacer es cambiar la linea de código donde se importo el "express-handlebars" cambiarla por esta
"const { engine } = require('express-handlebars');" (sin las comillas) y seguido cambiar en el 'app.engine' cambiar el 'exphbs' por 'engine'
Me salvaste, muchas gracias!
En las mismas, lo solucione con ponerle "=>" , pero mas adelante es imposible continuar ya que en ''links'' ya no deja realizar el render de platilla. Gracias @Ryan Navarro
Andaba atrasado por eso xd jaja muchas gracias
gracias pa
Sos el mejor ser humano que pisó este canal jajaaj llevaba buscando muchísimo y no encontraba la forma, hasta intenté cambiar de motor de plantillas pero nada, ¡GRACIAS!
Fazt me llevas a otro nivel men. Gracias, bro. No suelo hacerlo, pero debo hacerlo. Aun en este año y todo sirve, hay que leer algunos documentos que han actualizado o los comentarios. Gracias
Eu conheci o canal hoje e já sou fã. Parabéns!
que gran trabajo, fue un excelente tutorial, detalles como el usar templates lo hacen lejos de lo mejor que he visto, gracias por esto.
3:45:37 "y asi de sencillo hemos terminado con nuestra aplicacion" asdkjaklsdasld estube un dia entero :'c
jaja a mi 2 días XDD
jajaja a mi 3 dias xDD
jaja a mi 4 días XDD
DD
jaja a mi una semana XDDDDD
jaja yo a mi 1 mes XDDDDDDDDD
Impresionante tutorial. Varias veces tuve que revisar si la velocidad de reproducción del video no estaba al 1.5x o 2x, muy muy ágil el ritmo. Cada minuto se me hacía como 5 en lo que entendía y codificaba, pero vale mucho la pena. Felicidades por ese entusiasmo @Fazt. Sería un tutorial completamente redondo si hubieras incluido el deployment en un server, pero de cualquier forma, excelente tu trabajo y dedicación.
1:31:37 Cuidado con el campo "created_at timestamp NOT NULL DEFAULT current_timestamp" generado automático desde base de datos. Ya estando en producción, el servidor tomará su propia fecha, que no necesariamente coincidirá con la del usuario, y por lo cual el timeago mostrará datos incorrectos. Lo ideal sería tomar la fecha que tiene el cliente al momento de la creación del registro.
Muy buen aporte!
como tomo la fecha del cliente?
@@davinchocamaron646 En el 1:14:45 habría que crear una variable que almacene la fecha y hora del usuario usando new Date(), y luego agregarla al objeto newLink. Algo así:
const {title, url, description} = req.body;
const created_at = new Date();
const newLink = {
title, url, description,created_at,
user_id: req.user.id
};
MUCHAS GRACIAS por esta MASTERCLASS de MAESTROS!! He tardado 3 días en seguirla, pero he aprendido muchísimo. Gracias infinitas. Saludos desde Madrid.
solumobil.com
Te pasas man! Eres el mejor, gracias por todo!
solumobil.com
El mejor video de passport y mysql que existe en español en youtube, muchas gracias
Si a alguien le aparece el error ER_NOT_SUPPORTED_AUTH_MODE
Es muy probable que la versión del MySQL sea 8.0 y está versión trae un modo de autenticación predeterminado que aún no es compatible con esta biblioteca. Se soluciona de la siguiente forma:
1. Vas a MySQL y escribes la siguiente línea de código:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'escribe la contraseña';
Espero sea de su ayuda 😄
me sale Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password: YES), segun lei debo poner eso para cambiar la clave de mysql pero tengo mysql solo en la consola, al intentar poner eso me sale otro error, RROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'BY 'aÑsñ//or2*343s'' at line 1...
@@anonymushadow282 amigo tuve el mismo problema y me fije que tenia mal la estructura de el keys.js
@@mesac1988 encontre la solucion y no fue eso xque hasta copie y pegue el codigo, no se bien el xque del error pero tenia sqlServer y mysql instalados, al desinstalar sqlServer y toda su info me anduvo, parece que se interponian los datos op algo asi
Me salvaste la vida, estuve como 2 horas probando otros paquetes como connect-session-sequelize o connect mysql2, porque encima yo no uso el paquete mysql sino mysql2 que es más moderno y seguro y pensaba que eso tenía algo que ver. muchas graciasssssss
Que buen video, lo seguí por completo, no aburre en ningún momento y son 4 horas!
De verdad muchas gracias Fazt !!
amigo una pregunta estoy en windows y siempre tengo problemas con la consola cuando pongo mysql no me reconoce apesar de que tengo instalado xampp y tambien mysql como lo hiciste ayuda
fabuloso tutorial bro, se que estoy como 2 años tarde pero queria agradecerte por compartir tan buen material, aprendi muchisimo viendolo.
Hola Fazt, en producción se sube todo el proyecto? O hay que configurar algo adicional? Muy buen contenido. Saludos
x2
Puedes configurar las variables de entorno para que no se vea tu base de datos en el código y mas importante, manejar los errores. Ya si lo consideras necesario puedes usar transacciones en las rutas por si quieres usar el ejemplo como molde para tu propio proyecto.
Llevo SEMANAS buscando un tutorial que me sirva y encontré el adecuado, vieras que chingón se sintió que mandara datos correctamente a la bd :'DD ERES EL MEJOR!!!
Un cálido abrazo desde México, amigo.
Hay q imaginar cosas chingonas
Tengo un error en el minuto 18:15 me sale npm ERR! missing script: dev en la consola AYUDAA!
Tenia el mismo error y era error de sintaxis, revisa bien el codigo.
@@cristianjaimes9951 si bro, la única solución fue empezar todo desde el inicio y me di cuenta de algunos errores que había cometido en el código, también había instalado el NodoJS LTD y no el Actual por lo que me toco instalar de nuevo el NodoJS. Saludos!
otro que cambio es el const { create } = require('express-handlebars'); // Importa el método 'create'...buenisimo el video, gracias totales
1:16:08 justo ahi me sale un error x.x " pool.query is not a function"
Estoy en la misma situación, parece que la función pool.query( [lenguaje sql], callback function)
necesita afuerzas una funcion callback... definir en caso de error
@@finonomastropiero4261
router.post('/add', (req,res) =>{ // { //
aun asi hay error
@@finonomastropiero4261 avisa si te sale
@@elbrusbaskaev483 alguien pregunto en stackoverflow, y le respondieron bien.
Hice lo que indicaron y funcionó todo, mas no entiendo bien la cuestion de las promesas.
es.stackoverflow.com/questions/266927/error-en-almacenar-datos-con-mysql-y-node-js?newreg=02f0dbad8ecb48b08498a79e01aeb3b7
TE AMOOOOOOOOOOOO, pude hacer mi aplicacion usando oracle en vez de mysql y me salte los comentarios flash, por que son de mysql, y todo lo demas me fue de perlas, aunque si me arrojaba un error al momento de guardar datos en la sesion, eso lo resolvi importando unas cookies y creando mas arriba de app.use(session()); otra sesion que es la misma que el hizo donde esta guardando secret, resave y saveUnitialized
Tengo un problema con la vista profile.hbs, cuando añado {{user.fullname}} o {{user.username}} no me lo muestra por pantalla en la vista /profile, lo he puesto en las variables globales pero nada.
¿Llevo unas 4 horas intentando ver cuál es el error, pero aparentemente está todo bien, alguien me podría ayuda? Gracias.
Lo pudiste resolver?
En el archivo index.js asegurate de que las lineas "app.use(passport.initialize());" y "app.use(passport.session());" esten en la sección de "Middlewares", o sea antes de la sección de "//global variables", que es donde se encuentra esta linea: "app.locals.user = req.user;"
@@ThePablocaleb En el archivo index.js asegurate de que las lineas "app.use(passport.initialize());" y "app.use(passport.session());" esten en la sección de "Middlewares", o sea antes de la sección de "//global variables", que es donde se encuentra esta linea: "app.locals.user = req.user;"
@@sahuaro007 gracias esto me ayudo a solucionar un miss typing en un app.use
GRACIAS FAZT!!!!! Me demore todo el finde pero lo logre!, doy fe que todo funciona perfecto!, cuidado con meter los dedos mal!!!
solumobil.com
Sería posible un CRUD Node con express, React y MYSQL, gracias por el contenido
Solo cambia handlebars por React
eso esta interesante para aventurarte de manera autodidacta, no es tan distinto de esto. Te lo recomiendo, eso hice yo y aprendes mas solo, una vez que tienes una base como la de este video que siguiendo videos tutoriales para cada cosa que quieres hacer
@@luisdavidecheverria8281 Osea en ves de llamar a las vistas de los archivos handlebars, llamo a las vistas de los archivos que están dentro de la carpeta con el front en react ?
@@lionelojeda2593 tiens que instalar cors, y abrir en un puerto diferente el react y en otro le servidor, mirate el reciente video de fazt donde hace el stack MERN
Lo pregunte hace 4 meses xd. Gracias igual
Mis respetos a Fazt. Un millón de gracias por compartir tu conocimiento con el mundo.
podrias hacer un crud utilizando nodejs, react y mysql please
solumobil.com
me perdi un poco con lo de la funcion done, pero bueno, lo volvere a revisar, gracias, al fin alguien que explica esto
Eu sou do Brasil acompanho seus vídeos PF vc poderia fazer mais vídeos sobre mongo dB , parabéns por todos os vídeos e muito obrigado pelo conteúdo
Gente! Aca 2023! Tuve muchos problemas a la hora de seguir este magnífico tutorial ya que muchos módulos cambiar.. pero luego de tanto buscar pude encontrar todas las soluciones!! Así que si tienen dudas pregunten! Gracias fatz!
hola bro, como hiciste en el final con el user_id, por que yo lo hice tal cual, me permite agregar el link con total normalidad, pero cuando voy a "All links" no me muestra nada, como si no tuviera, y en realidad están creados en la base de datos.
bro, podrías recopilar algunas soluciones?
Ahora con postgres
Tooooooooooooma tu like, quien en el 2021!!! confirmo que funciona tal cual indica!!!! saludos desde Perú!!
Genial!!! pero no nos olvides a los de MERN XD! saludos
01:06:31 para el botón me funcionó:
Save
Como que nadie entendio la referencia de pew news
Explicate
yo si jaja
Jajaja estaba buscando desesperado a ver si alguien más lo había captado, parece somos pocos xD
Nunca antes vi completo un video tan largo en YT! jaja... De principio a fin, excelentes explicaciones y mucha información. A veces tenia que poner la velocidad a 0.75 para seguirte pero igual me gustó mucho. Seguiré más tutoriales tuyos! Gracias por el enorme esfuerzo! Like y Suscripto!
luego de un mes recien terminé el video XD
bueno fui viendo el video y lo iba modificando a un sistema de examenes (como trabajo final de la universidad)
donde hay profesores, estudiantes, los profesores pueden crear preguntas y los estudiantes pueden tomar examen,
la verdad que sin tu video hubiera sido imposible avanzar por mi cuenta, por ese detalle te agradezco.
Orgullo Peruano FAZT
Muchas gracias Fazt. Acabo de terminar este fabuloso curso. Solo faltaron los iconos. Muchas gracias y saludos.
Muy bien Fazt. Excelente trabajo. Tienes muy buen conocimiento de estas herramintas. Felicitaciones.Muchas gracias por compartirlo. Que avances continuamente y logres TODO lo que quieras. Eso te lo devuelve la Vida por compartir.
Estas onfire con estos aportes, te mereces que comparta todos tus videos. El mejor youtuber de programacion aplicada
Excelente vídeo. Sin desperdicio cada minuto. Ágil, excelentemente explicado. Entre sin saber nada de nodejs y ya tengo una aplicación base completa y funcional.
Como ya dijeron, saca patreon, mereces que la gente te de dinero por la ayuda que nos estas dando.
Mientras ustedes le dicen que patreon el ya creo varios emprendimientos gracias a sus seguidores, otra manera de monetizar :9
Muchas gracias, excelente el video, cero desperdicio, horas excelentemente invertidas, vale la pena!
Ptmr... Hermano, te A-M-O. Me ha servido demasiado este tutorial, al fin lo terminé. Mil gracias
Amigo, tengo un problema con el bcrypt ¿podrías ayudarme?
Un año después me encontre con tu curso excelente nivel, gracias por el aporte!
solumobil.com
Excelente ahora voy a consumir este back con mi front desde angular, kas mejores 4 horas
Me fascinó este tutorial. Es el mejor que he descubierto, incluso mejor que los de pago
El mejor canal de programación 👍👍👍🙏🙏🙏🙏🙏👍👍👍🙏🙏🙏🙏👍👍👍🇨🇴
Fantastico, muchas gracias por este video me ha ayudado mucho a comprender como funcionan estas tecnologias, ademas me ha animado a extrapolar esta app para mis cosas con vue. Muchas gracias.
Excelente video, muchas gracias
Por favor continúa con más clases de NodeJs
Que joya joya JOYA este canal de youtube, si el video dice 4 horas, pero no te dice +4 días de conocimiento que te aporta
No se porque pero esto me hace amar mas a flask, me sente a ver el video a las 3 de la tarde y todavia no termino(son las 11)---- GRACIAS FAZT
El mejor guia que he visto ✍