INDICE DEL TUTORIAL 1. Backend: 04:47 2. Views (Template Engine): 41:24 3. CRUD: 59:13 4. Register/SingUp: 02:03:30 5. Login / SignIn: 02:30:27 6. Navigation: 02:51:54 7. Personal Data for Users: 03:12:40 Hey Coders, como el vídeo es largo, les dejo el Indice del tutorial para que lo pueden continuar en su propio tiempo, y velocidad. Adicionalmente pueden encontrar más información como el código final, la comunidad, y demás en la descripción :) PD: el siguiente ejemplo de Nodejs y Mongodb, sera la creación de una tienda virtual utilizando Stripe.
@XavierPC6 жыл бұрын
SUPER GENIAL FAZT !!! (like♥) GRACIAS POR TUS VIDEOS
@leroycarrasquero64916 жыл бұрын
Es algo particular que esté hecho en NodeJs & Mongodb? se podría usar una base de datos Sql como Postgres? Me refiero a lo óptimo? o lo ideal de node es trabajarlo con Mongo?
@JosueVader5 жыл бұрын
@@leroycarrasquero6491 lo ideal es mongo ya que usas el mismo lenguaje de Javascript para hacer todo el backend y los modelos, es por eso que el stack MEAN es lo que es, un conjunto de tecnologías que usa Javascript para hacer páginas web, usa mongo, es más fácil y sencillo del o que se ve, saludos.
@finnelhumano33265 жыл бұрын
Que geniooo !
@zeykilow77215 жыл бұрын
Hay dios
@williamromerovela5 жыл бұрын
¿Sabes cual es la ventaja con tus videos? Es que pese a que son largos, explicas como todos quisieramos que nos explicaran cuando no entendemos. ¡Gracias Fazt!
@AngelPC4 жыл бұрын
Definitivamente así es, este hombre te explica todo cada linea de codigo"como con plastilina", te mastica todo
@kapitan18-14 жыл бұрын
@@AngelPC oye no me reconoce el npm porque??
@AngelPC4 жыл бұрын
@@kapitan18-1 manda como lo estás colocando o que error te está mandando
@emersonperalesvillanueva85684 жыл бұрын
siCierto bro :'u
@TheLukeOMG4 жыл бұрын
@@kapitan18-1 proba con yarn
@TanisJam6 жыл бұрын
Genial Fazt! Nunca fui amante de los videos largos hasta que llegué a tu canal. Para quienes estamos aprendiendo con recursos gratuitos tu contenido es una joya. Gracias por todo lo que haces!
Muchas gracias!! en caso de que no les funciones es porque el methodOverride tiene una letra r de más.
@thebrayannohax4904 Жыл бұрын
Graciaaaas
@SergioLotito3 жыл бұрын
Excelente, explicás clarito, paso a paso. Muchas gracias por tus videos!!! Me topé con ésto, a los que los find() de la base de datos le traiga un error en la consola tipo: "Handlebars: Access has been denied to resolve the property ..." tienen que ponerle find().lean() o findById().lean(). Por lo menos en mi versión de node/mongo hubo ese cambio.
@perezg742 жыл бұрын
Muchas gracias amigo, estaba rompiéndome la cabeza con ello
@HUNTER_PATROL2 жыл бұрын
tengo el mismo problema dice access has been denied to resolve the property 'title' because it is not an 'own property' podrian ayudarme? minuto 1:29:29
@angelicavergara41292 жыл бұрын
me ayudaste muchísimo con eso, estaba teniendo exactamente ese problema y tenia mas de una hora partiéndome la cabeza, revisando que había puesto mal si todo estaba igual
@MiikeEnCiel Жыл бұрын
Muchas gracias este proyecto ya tiene su tiempo y muchas dependencias han cambiado el uso de métodos aun así me sirvió muchísimo no solo para aprender siguiendo lo que hacías sino para buscar por mi parte la nueva aplicación a los métodos para poder hacer funcionar en su totalidad este proyecto. También agradecer a los que en sus comentarios ayudaron a resolver los inconvenientes que se fueron presentado.
@revoldfmb6 жыл бұрын
Hombre, hay que agradecer tus conocimientos y como los impartes. Te invitaría las cervezas respectivas por tú ayuda a los desarrolladores De hecho, tus tutoriales me han salvado la vida en algunos proyectos. De grande quiero ser como tú Saludos
@matiasbertoni15613 жыл бұрын
si no les lee el titulo ni la desc al agregar el crud. se soluciona agregando .lean() despues del .find(): router.get('/notes', async (req, res) =>{ const notes = await Note.find().lean(); res.render('notes/all-notes', { notes }) })
@emersonperalesvillanueva85684 жыл бұрын
Si han tenido problemas con el {{user.name}} en el minuto 3:09:53 cambien la configuración del motor de vistas por este: app.engine('.hbs', exphdb({ defaultLayout: 'main', layoutsDir: path.join(app.get('views'), 'layouts'), partialsDir: path.join(app.get('views'), 'partials'), runtimeOptions: { allowProtoPropertiesByDefault: true, // allowProtoMethodsByDefault: true }, extname: '.hbs', }));
@antoniopuerta95633 жыл бұрын
Bravo, crack !
@malla91713 жыл бұрын
Muchas gracias :D
@juanmanuelarmeroviveros53313 жыл бұрын
me acabo de tirar una hora buscando la solución y después vi este comentario. Gracias Broo
@Thothitox01203 жыл бұрын
Si tengo otro nombre para el name como lo hago
@Sotelord3 жыл бұрын
crack
@tintanarrativa65074 жыл бұрын
Fazt! Llevo meses viendo tus videos, y definitivamente tienes uno de los mejores canales de programación, gracias por compartir tus conocimientos! Muy bien video!
@ivanmeller15 жыл бұрын
Muchas gracias Fazt! Tus videos son excelentes, muy bien explicados, soy desarrollador jr y estoy aprendiendo estas tecnologías y tus videos son un lujo. Seguí así, lo mejor en habla hispana.
5 жыл бұрын
Había terminado un curso en udemy de Nodejs y entendía perfectamente todo lo que hablabas. Sin embargo, por falta de práctica algunos conceptos no los recordaba bien. Éste video me ayudó mucho a reforzar mis conocimientos, muchas gracias Fazt!
@LordMegabite6 жыл бұрын
Calidad de este tipo en castellano no se ve todos los dias. Enhorabuena por el trabajo cada video esta trabajado y se aprende mucho con toda la informacion que vas dando, que es de lo mas importante para aquellos que comenzamos a aprender nuevos frameworks
@darkin52253 жыл бұрын
A éste video le tengo unas ganas hace rato, le metí varias horas(solo hice una hora de video jaja) y hasta ahora entendí y me salió todo(aveces no entiendo algo y lo dejo). Gracias Fazt, podrá pasar el tiempo pero éstos videos valen oro.
@steventabango47906 жыл бұрын
Ojalá hubiese visto este video antes de mi entrevista de trabajo.
@Devniel545 жыл бұрын
eso es lo que estoy haciendo yo V:
@jesushernandez19224 жыл бұрын
@@Devniel54 Rttttttt Jajajjajajaja Eso es lo que ando haciendo jajaja
@javierjimenez36274 жыл бұрын
@@jesushernandez1922 y Como te. Fue 👀 ?
@erickortiz60494 жыл бұрын
saben por que al colocar el comando mongod me sale error?
@gersongonzalez.41664 жыл бұрын
@@erickortiz6049 lo tienes agregado al path?
@nelsons.7755 жыл бұрын
El mejor video de programación que he visto, siempre para hacer algo tengo que estar saltando entre videos de diferentes canales , pero con este comprendí no solo lo que nesitaba sino que bastante más
@rolifuentes3 жыл бұрын
Súbelo mil veces para darle mil veces LIKE!! Muchas gracias
@ehm12243 жыл бұрын
Fazt, Edgardo desde Colombia. No quería dejar pasar ni un minutos mas sin agradecerte tamaño esfuerzo, realmente te doy las gracias por tomarte todo este tiempo para ayudarnos en nuestro aprendizaje. te deseo mucha prosperidad y salud para que sigas en esta cruzada.
@Sotelord3 жыл бұрын
Hubo un pequeño cambio en express-handlebars, a la hora de hacer app.engine ('.hbs', exphbs ... es necesario poner exphbs.engine. Si no les indica que exphbs no es una funcion.
@v1bra3873 жыл бұрын
hay un video que es la actualizacion de este, lo subio hace mes y medio
@adrielibarra70873 жыл бұрын
@@v1bra387 Donde aparece el video actualizado?
@esteban11333 жыл бұрын
@@adrielibarra7087 en el canal Fazt Code
@hernansastre87322 жыл бұрын
@@v1bra387 donde?
@MrGasparilom2 жыл бұрын
Uff, casi me vuelvo mono revisando y volviendo atras en el video para ver donde cometí el error ja ja ja
@chonchilo4 жыл бұрын
Sos crack campeón! Me morfé el vidio mal... Tuve un par de inconvenientes debido a las versiones, porque me tardé un par de años en ver el tutorial, a parte de eso, ESPECTACULAR! Muchas gracias y sigue enseñándonos! Saludos desde Argentina.
@hugogalvez79853 жыл бұрын
una solución para ara la los que tienen este error: "Handlebars: Access has been denied to resolve the property" al usar {{each}}, es usar la función .lean(), asi: "const notas = await Note.find().lean();" agiliza el proceso pero, devuelve un objeto JSON en vez de uno del propio Mongoose
@Thecots3 жыл бұрын
grande coño
@saddamviera25963 жыл бұрын
brother eres un maestro, pero solo por conocimiento, que es lo que esta retornando a "all-notes" y como hacer un teste tipo console.log en "all-notes" para saber q hay. por ejemplo yo corregi el error colocando notes.title pero no mostraba nada
@homerohernan3 жыл бұрын
Pffff llevo horas buscando como solucionarlo, muchas gracias!!
@yeisondiaz88013 жыл бұрын
grande amigo llevaba un día buscando la solución.
@csh59834 жыл бұрын
Me clave las 3 horas de video y todo fue excelente!, muchas gracias profesor!!! :D funciono todo!, ahora voy a seguir practicando para ver el video de la red social que son como 5 horas!, que valen la pena!, muy agradecido con tu material! :D
@davidmorales11633 жыл бұрын
El equivalente de < class="form-group"> y < class="btn-block"> en Bootstrap v5 es < class="mt-3"> y respectivamente.
@diegohuapayarivera25513 жыл бұрын
Ty men, no sabia porque no funcionaba
@hugogalvez79853 жыл бұрын
MUCHAS GRACIAS!! enserio! pero.. ¿por que paso esto?
@luqezr3 жыл бұрын
Media hora estuve viendo por que no funcionaba btn-block ._. gracias!!
@criistiansuarez35633 жыл бұрын
@@hugogalvez7985 porque se actualiza constantemente y mejora. como en todos los lenguajes
@bitshifter46152 жыл бұрын
Qué raro, a mí me funciona con form-group y btn-block
@ramilo695 жыл бұрын
No paro de aprender....simplemente tu canal es un autentico tesoro; gracias por todo y espero que te veas recompensado por todos estos tutoriales....
@joaquimjairmerloluque34883 жыл бұрын
si tienen un error el el minuto 1:29:40 router.get('/notes', async (req, res) => { const notes = await Note.find().lean() console.log(notes) res.render('notes/all-notes', {notes}) }) esta es la solución
@granjuangamer22783 жыл бұрын
joder, muchas gracias amigo por la solucion, estaba sufriendo por ese error, GRACIAS
@pacoalvarez51715 жыл бұрын
Las felicitaciones, mas bien son para ti, porque eres una máquina explicando, en conocimientos, en paciencia... En definitiva, que muchiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisimas gracias por el vídeo. Saludos desde España.
@soycruzado4 жыл бұрын
Por si alguien tiene el problema de Handlebars: Access has been denied to resolve the property "..." because it is not an "own property" of its parent. lo que necesitan es añadir otra dependencia la cual se instala de esta forma npm install @handlebars/allow-prototype-access Una vez instalada al archivo index.js que se encuentra en la raíz le colocan las siguientes lineas en el área de importación const handlebars = require('handlebars'); const {allowInsecurePrototypeAccess} = require('@handlebars/allow-prototype-access'); Y dentro de app.engine después del extname colocan lo siguiente handlebars: allowInsecurePrototypeAccess(handlebars) De esta forma podrán tener acceso a los datos para mostrarlos en las vistas
@Juanagogoolives4 жыл бұрын
Gracias crack! :)
@VictorRafaelMachadoArteaga4 жыл бұрын
Funciona perfectamente!!
@luisandrescabezasvelez30504 жыл бұрын
eres un capo , solucionaste el inconveniente
@fernandofernando83824 жыл бұрын
mejor router.get('/notes', async (req, res) => { await Note.find() .then(documentos => { const contexto = { notes: documentos.map(documento => { return { title: documento.title, description: documento.description } }) } res.render('notes/all-notes', { notes: contexto.notes }) }) }) y te evitas hacer insegura tu app :V
@miguelrocha56624 жыл бұрын
Creo que ya había puesto este comentario. Minuto 1:36:28 aprox. Para borrar los registros de una coleccion: db.notes.remove({}). Excelente material!!! Muchas gracias por compartir el conocimiento
@kastikas2 жыл бұрын
Estube copy-codeando de este video y solo queria decirles que si reciben el error de EXPHBS is not a function lo pueden arreglar con app.set('.hbs', exphbs.engine({...}))
@pabloalejandroramos Жыл бұрын
Gracias crack me salvaste!
@jato21302 жыл бұрын
Las opciones userCreateIndex, useFindAndModify, useNewUrlParser y useUnifiedTopology de mongoose han sido obsoletas, usad mongoose.connect('bd_URI') simplemente ya que a partir de la v6 estas estan fijadas de la siguiente manera: useNewUrlParser, useUnifiedTopology y useCreateIndex como true, y useFindAndModify como false. Me ha encantado como explicas cada parte y aconsejas tomarse los descansos necesarios, solo estoy familiarizado con java y me has ayudado mucho a afianzar conocimientos en js. Espero que siga creciendo el canal como se merece.
@Disconluis6 жыл бұрын
Ya era hora de un video asi! Gracias!
@pablogonzalezramirez73976 жыл бұрын
Felicitar al Creador de Este Video de mucha ayuda, rapida introducción y abarca los temas mas importantes, Muy Bien
@gersonmayer5 жыл бұрын
Me demore 4 dias, valieron la pena, gracias por compartir!
@narutoshadown4 жыл бұрын
nomms es demaciado jajajaja creo que deberias dedicarte mas
@gersonmayer4 жыл бұрын
@@narutoshadown hoy en "opiniones que nadie pidió"...
@hoeangeru24 жыл бұрын
No puedo creer que lo pude terminar... me tarde mucho pero ahora me queda estudiar el codigo. Gracias!!!!
@estuardomarroquin3033 жыл бұрын
Para los que no les redirecciona a su id en el minuto 1:39:26 el error no esta en el archivo all-notes.hbs lo que pasa es que no están obteniendo la id. Para obtener la id deben ir al archivo notes.js y obtener los datos de las notas así: router.get('/notes', async (req, res)=>{ await Note.find().sort({date: 'desc'}) .then(documentos =>{ const contexto = { notes: documentos.map(documento=>{ return{ title: documento.title, description: documento.description, _id: documento._id } }) } res.render('notes/all-notes', { notes: contexto.notes}) }) })
@jhosimarpinto47693 жыл бұрын
Muchas gracias bro. Por otro lado, en el minuto 1:45:00 cuando hago click en el lapicito para editar la nota me sale el mensaje: Cannot GET /notes/edit/6099f04341e760322c0a024e El código que usa Fazt en el ARCHIVO note.js para editar las notas es: router.get('notes/edit/:id', async (req, res) => { const note = await Note.findById(req.params.id); res.render('notes/edit-note', { note }); }); Pero no me funciona.
@wandamon11523 жыл бұрын
@@jhosimarpinto4769 tengo el mismo problema, al final usted pudo resolverlo??
@luisdavidmendez11663 жыл бұрын
@@jhosimarpinto4769 Bueno para los que tuvieron el mismo error que yo al mostrar los elementos, es fácil de resolver claro que a mi me tomo mucho pues estoy aprendiendo. tenia la opción de usar Note.find().len() pero cuando lo utilizaba así luego no me permitía editarlo, pues las opciones mas validas son: usar el método .map() para mapearlo y así si se muestra, pero a la hora de hacer la consulta para actualizarlo mongoose devuelve un objeto que pertenece a mongoose valga la redundancia!! y no se puede mapear por que el método .map() es para arrays no para objetos, pero la solución es mas sencilla, solo tenemos que clonar el objeto de mongoose con Object.assing({},note) y así lo pasa sin tener que instalar una versión anterior de handlebars y también se aprende a usar con las nuevas actualizaciones. claro que también tendremos que cambiar algunas cosas como NombreDeConstante._doc. _id, NombreDeConstante._doc.title, etc. algo como: mapeando el array que devuelve router.get('/notes', async (req, res) => { await Note.find().then(doc => { const ari = { notes: doc.map(document => { return { id: document._id, title: document.title, description: document.description } }) } res.render('notes/all-notes', { notes: ari.notes }) }); }); pasando los datos para actualizarlos y que no de error de acceso al mandarlo por el método put router.get('/notes/edit/:id', async (req, res) => { const note = await Note.findById(req.params.id); const nada=Object.assign({},note); res.render('notes/edit-note', { nada }); }); el HTML seria algo así: Edit Note {{nada._doc.description}} Guadar talves hay mejores opciones pero esta fue la que encontré hasta el momento.
@pkmorsan6 жыл бұрын
Genial vídeo para quienes tienen una base de nodejs y no saben por donde empezar para desarrollar una app desde cero, te da una perspectiva excelente para su desarrollo. Por poner una "pega" le ha faltado la actualización de la clase "active" del navbar según la página donde nos encontramos. Enhorabuena y gracias por tu labor.
@byRedHunter4 жыл бұрын
Otra forma de hacerlo en el minuto 1:27:43, es de la sigiente forma: const documents = await Note.find().sort({ date: 'desc' }) let collection = [] documents.forEach((document) => { collection.push({ title: document.title, description: document.description, }) }) res.render('notes/all-notes', { notes: collection }) espero les ayude. 😁
@miguelangellp15164 жыл бұрын
eres un crack amigo, lo habia consultado en stackoverflow y lo tenian con las promesas, pero esta es mucho mas facil de comprender. Gracias
@alvarotapia96964 жыл бұрын
Buena maquinola
@luisfarco55224 жыл бұрын
Eres grande amigo Gracias
@TheCharlie_984 жыл бұрын
Alguien en este fragmento que tenga este error? Se generan las tarjetas según las notas que contiene la BD, pero no muestra el titulo y la descripción. El error que se genera es: Handlebars: Access has been denied to resolve the property "title" because it is not an "own property" of its parent. You can add a runtime option to disable the check or this warning: See handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details
@miguelangellp15164 жыл бұрын
@@TheCharlie_98 La solución al error no es instalar la dependencia desactualizada, sucede que handlebars actualizó sus librerías para mejorar la seguridad, y entre esos cambios es la forma en que se envían los datos consultados de la base de datos hacia las vistas. Por tanto la nueva forma que deben realizar es crear un array, llenar los datos de la consulta en el array, y renderizar la vista con el array y no con la consulta directa de la base. Ejemplo const imagenes = await Imagenes.find(); const coleccionImagenes = []; imagenes.forEach( image => { coleccionImagenes.push({ titulo : image.titulo, url : image.url }); res.render('/',{imagenes : coleccionImagenes}); -------------------------------------------------------------------- Lo anterior en el caso de usar .find() ya que devuelve un arreglo con todos los datos. Si usas .findOne() no es necesario que uses el forEach, accedes directamente a cada atributo. Construyendo otro objecto destructurando. Ejemplo const { titulo , url } = Imagenes.findOne({_id)}); const coleccionImagenes = { titulo, url }; res.render('/',{imagenes : coleccionImagenes}); Saludos.
@jvivasmora5 жыл бұрын
Bro encantando con tu vídeo, lo vi sin excusas muy atento, aprendí mucho más de lo que sé de NodeJS, JavaScript y MongoDB porque ya sé algo sobre Bootstrap, el mejor amigo la verdad gracias por tu paciencia y tu manera de explicar en los vídeos, te dejo mi buen like y sin duda mi recomendación hacía mis colegas
@jhonoquendo61636 жыл бұрын
Wooo, respetable brother, muchas gracias por compartir tal conocimiento, muy agradecido. Con ansias de seguir aprendiendo. Saludos.
@LaminaFerro6 жыл бұрын
Solo llevo viendo 2 minutos y ya me parece un buen vídeo, nada mas ver, encima , que has creado un indice del video GENIAL. Gracias me llegas en un momento super oportuno para un proyecto que estoy haciendo
@zacsam16156 жыл бұрын
Sos un crack, saludos desde Argentina!
@salamandrasps35705 жыл бұрын
Fantástico Fazt! Gracias, muchas gracias por invertir tu valioso tiempo enseñando de la forma en que lo haces. Excelente tutorial. Yo provengo de .NET, y gracias tus vídeos, he aprendido que es y como funciona Node JS, NongoDB y ahora como integrar todo. Continuare con Angular, al final decidir en cual de estas tecnologías poder quedarme. Me atrae mucho la idea de desarrollar todo en un solo lenguage pero siempre he querido a aprender también ANGULAR. Ahí va obviamente mi pulgar arriba y hace ya mucho estoy suscrito, solo que hasta hoy he decido iniciar con tus vídeos de capacitación.
@grbsql6 жыл бұрын
Muy bien Fazt. Excelentes cursos. Muchas gracias
@luisgaravito96482 жыл бұрын
Excelente en todos los aspectos, desde lo pedagógico hasta el gran conocimiento que tienes en todo los referente al desarrollo en aplicaciones Web. Te felicito!!!!!!! Por Favor sigue enseñándonos. Mil Gracias
@robertramirez71534 жыл бұрын
Buenísimo el tutorial. Mi profesor de la Universidad lo está usando para enseñarnos NodeJS
@programacion31543 жыл бұрын
Kpos, si en 1:30:00 no les sale los titulos y descripciones de sus notas, vayan a routes/notes.js y ahi en la parte donde tienen el const notes = await Note.find() agreguenle el .lean(), o sea que quedaria asi "const notes = await Note.find().lean();" Espero que les sirva.
@delficanas35623 жыл бұрын
Me re sirvió! Estuve mucho tiempo buscando si había escrito algo mal. Muchas gracias!
@programacion31543 жыл бұрын
@@delficanas3562 Me alegra mucho
@PedroLandauro3 жыл бұрын
gracias, eres un crack.
@tomasinlondon6 жыл бұрын
Lo he visto enterito y cada minuto merece la pena! Millones de gracias por tu ayuda!
@ArmandoHinojosaCcamaSARC6 жыл бұрын
Asuuu :O
@DanniCZ2 жыл бұрын
wey ... gracias a ti conseguí trabajo como desarrollador ... Mil gracias!
@kimberlygarcesperez59753 жыл бұрын
Los cambios que se deberia hacer en el index.js para el correcto funcionamiento son estos: const express = require('express'); const path = require('path'); const Handlebars = require('handlebars') const expressHandlebars = require('express-handlebars') const methodOverride = require('method-override') const session = require('express-session') const {allowInsecurePrototypeAccess} = require('@handlebars/allow-prototype-access') //inicialitation const app = express(); require('./database') //settings app.set('port', process.env.PORT || 3000) app.set('views', path.join(__dirname, 'views')) app.engine('.hbs', expressHandlebars({ defaultLayout: 'main', handlebars: allowInsecurePrototypeAccess(Handlebars), layoutsDir: path.join(app.get('views'), 'layouts'), partialsDir: path.join(app.get('views'), 'partials'), extname: '.hbs' })); app.set('view engine', '.hbs'); //Middlewares espero les sea de ayuda
@guidomr31583 жыл бұрын
Muchas gracias!! Me solucionaste un error
@cajegoprosilveredits99492 жыл бұрын
Gracias por tu aporte pero cuando reemplazo tu código no se me ejecuta el servidor, hay que hacer algo mas?
@asd-1234 жыл бұрын
Gracias por estos vídeos, soy estudiante de informática y he decidido aprender back end por mi cuenta, con ayuda de documentaciones y adicionando tus vídeos nos ayudan bastante. Me suscribo
@iG-MC52 жыл бұрын
Para los que tiene problemas para acceder a las propiedades user.name en 3:09:48. En passport.js, debes cambiar el passport.deserializeUser((id, done) => { User.findById(id, (err, user) => { done(err, user); }); }); por passport.deserializeUser(function (id, done) { User.findById(id) .lean() .exec(function (err, user) { done(err, user); }); });
@keylerfernandotajtaj10842 жыл бұрын
Que nivel de explicación Fazt, gracias. Si están utilizando la versión 6 de mongo db ya no les "funcionará" el comando: mongo. Únicamente asegúrense de que tengan mongo server y si quieren visualizar su inserción utilicen mongo compass.
@screamdust47243 жыл бұрын
HUMILDE APORTE. Si tienes el problema de que al enviar el formulario con datos en la consola aparece lo siguiente: [Object: null prototype] { title: hola1 description: hola2} debes ir a la parte de las rutas y recibir los parametros para transformarlos en JSON mediante una constante, de la siguiente manera: const obj = JSON.parse(JSON.stringify(req.body)); console.log(obj); res.send('ok'); Esto permitirá que tus datos se lean correctamente
@gramajocristianismael2824 жыл бұрын
Estoy justamente en 29/7/2020 en 1:14:35 del video, antes que nada gracias por compartir tu conocimiento. Ahora, vi que muchos consultaban por la validacion del lado del server como respuesta al crear la nota con los campos vacios(o llenos), y quise dejar una solución, almenos la que me parecio sencilla para empezar: router.post('/notes/new-note', (req,res)=>{ const respuesta = req.body; const errores = []; const acept = {text:'Datos correctos!'}; if(respuesta.title == '' && respuesta.description == ''){ errores.push({text:'Inserte titulo!'}) errores.push({text:'Descripcion!'}) }else if(respuesta.title == ''){ errores.push({text:'Inserte titulo!'}) }else if(respuesta.description == ''){ errores.push({text:'Descripcion!'}) } if(errores.length > 0){ res.render('notes/new-note', {errores}) }else{ res.render('notes/new-note', {acept}) } })
@Nipro-ms9zx2 жыл бұрын
hermano me salvaste la vida. gracias
@renantello85234 жыл бұрын
Hola fazt genial el tutorial incluso para beginner como yo, una consulta al declarar la variable global 3:08:44 res.locals.user =req.user || null; al momento de arrancar tengo el siguiente problema "Handlebars: Access has been denied to resolve the property "from" because it is not an "own property" agradecería que me pudieras ayudar con el problema
@ricardoisaza57803 жыл бұрын
Hola, lo pudiste resolver?
@Thothitox01203 жыл бұрын
como lo arreglaste
@MrGasparilom2 жыл бұрын
@@Thothitox0120 const notes = await Note.find({}).lean().sort({date: 'desc'}); al find() debe agregarle los Corchetes y luego un .lean().
@LorenzoJimenez3 жыл бұрын
Dos años después sigue siendo muy útil. Muchas gracias
@Fazt Amigo, ante todo, muchas gracias por estar compartiendo ese gran contenido gratis, usted es sensacional !!! Y segundo, quiero decir que el curso fue una gran revisión acerca de la tecnología nodeJS y es super indicado para alguien que quiere aprender desde cero a utilizarlo (el node). Después de este tutorial que es demasiado fácil de entender (la parte más compleja es la de autenticación con el módulo passport, pero nada de otro mundo) ya puedo decir que tengo condiciones de empezar a desarrollar mis propias aplicaciones y utilizar otros módulos.
@chrisytbexp67055 жыл бұрын
Hola amigo fazt, quisiera saber si hay alguna forma de poder apoyarte monetariamente, patreon, paypal, etc Estoy muy agradecido con tus videos Sigue asi!
@hazlotumismo14195 жыл бұрын
Ojala hiciera su extensión de Paypal para recibir pagos, seria super fácil recompensarle. O No busca sacar provecho de sus conocimientos? Quizá no lo necesita, No lo sabemos...
@oskar26845 жыл бұрын
Hola Fazt, llevo unos 3 meses aprendiendo, ojala sigas haciendo vídeos así, son los que mejor explicados están. Gracias.
@albertorivera84284 жыл бұрын
Lo mejor para continuar con el supervideo en el minuto 1:27:47 y 3:09:00 es mejor instalar la version de express-handelbars 3.0.0 como las tiene @fazt veriones posteriores no funcionan, intente de varias maneras. comando para desistalar handelbars npm rm express-handlebars instalar 3.0.0 express-handlebars npm i express-handlebars@3.0.0
@albertorivera84284 жыл бұрын
en el 1:39:00 aprox. hay que usar este codigo, en la ruta de /notes router.get('/notes', async (req, res) => { await Note.find().sort({date:'desc'}) .then(documentos => { const contexto = { notes: documentos.map(documento => { return { _id: documento.id, title: documento.title, description: documento.description } }) } res.render('notes/all-notes', { notes: contexto.notes }) }) }); hay que recordar que en hbs como yo lo estoy mandando es igual al de fazt, mas abajo en algunos comentarios estubieron haciendo pruebas y cambiaban _id por id, yo lo deje tal cual, checa tu código.
@albertorivera84284 жыл бұрын
Mi servidor local estaba trabado, talvez el tuyo tambien ya intentaste reiniciando el servidor y iniciar servidor Comando para iniciar servidor node src/index.js
@bac24214 жыл бұрын
Gracias crack
@rodymichel4 жыл бұрын
Gracias faz excelente tutorial vi todo tu vídeo y la verdad aprendí más de vos q de Los profesores qué tengo en la universidad gracias por tus videos
@richardcarmonaestrada59206 жыл бұрын
y gratis ??? genial felicidades Fazt , suscrito y con la campana activa :)
@grbsql6 жыл бұрын
Acabo de terminar el de views. Muy importante de tus vídeo cursos, que todo funciona bien. Sólo en uno me tocó investigar porque cambió una versión. Muchas gracias Fazt.
@webyipei26216 жыл бұрын
Primero de todo video genial. Segundo, como podemos hacer para que el login y registro consuma por frontend con Angular/vue/react ?
@emeldiaz3936 жыл бұрын
Fazt tiene un video donde hace una aplicación similar usando React, pero sin backend. Te dejo el link... kzbin.info/www/bejne/aGGXp2iHja2fo8U
@grbsql6 жыл бұрын
Saludo Fazt. Excelentes cursos los que elaboras. Eres grande. Muchas gracias y felicitaciones.
@lalibertadavanzamendoza3 жыл бұрын
Para los que tienen problemas con handlebars, en el archivo src/index.js tienen que modificar el app.engine de la linea 17 y agregarle esas properties al exphbs allowProtoPropertiesByDefault: true y allowProtoMethodsByDefault: true. De la manera que el codigo les quedara de la siguiente manera: app.engine('.hbs', exphbs({ defaultLayout: 'main', runtimeOptions: { allowProtoPropertiesByDefault: true, allowProtoMethodsByDefault: true, }, layoutsDir: path.join(app.get('views'), 'layouts'), partialsDir: path.join(app.get('views'), 'partials'), extname: '.hbs' })); de esta manera solucionan el problema de handlebars en toda la aplicacion y no tienen que recurrir a parches con lean().
@omarnavarro3693 жыл бұрын
Gracias!!
@sofc2233 жыл бұрын
Muchas gracias! Andaba desesperada por que no encontraba la solución a este error, te mando un beso!
@kevinhiggins3206 жыл бұрын
@Fazt, gracias por tomarte tu tiempo y compartir tu conocimiento. Con tus tutoriales he comenzado amar el desarrollo.
@valeriofunk50004 жыл бұрын
para los que tengan el warning en consola de Handlebars: Access has been denied to resolve the property "title" because it is not an "own property" of its parent. al intentar ver las notas. agreguen la opción lean() así. const notes = await Note.find().lean(); para convertir el documento mongoose a un POJO(plain old javascript object) y poder resolver la propiedad como hijo de su pariente
@tony001102 жыл бұрын
muchas gracias, me estaba volviendo loco por eso
@klan3512 жыл бұрын
muchisimas gracias!
@Daker11Gamer2 жыл бұрын
Muchas Gracias, no entendía que pasaba
@Graziel6 жыл бұрын
2:58 yo pregunte eso, y me dieron un corazón y yo pensaba que me habían ignorado jaja buen vídeo :D
@albertorivera84284 жыл бұрын
En el 3:09:00 aprox utilice este codigo en el index.js principal para poder realizar el saludo al usuario, con el de fazt ya no me funciona hasta esta fecha app.use((req, res, next) => { res.locals.success_msg = req.flash('success_msg'); res.locals.error_msg = req.flash('error_msg'); res.locals.error = req.flash('error'); let user = null if(req.user){ user =JSON.parse(JSON.stringify(req.user)) } res.locals.user = user next(); });
@oggijuega4 жыл бұрын
Excelente, handlebars no te deja acceder a las propiedades de user directamente, así que debes convertirlo en un texto.
@javierenriquemendozamercad60226 жыл бұрын
Amigo muchísimas gracias, la verdad es que has explicado muy bien todos los temas. Han sido las mejores 3 horas que he invertido en mi aprendizaje de Node.js.
@PabloBezzard3 жыл бұрын
Hola, si alguien le salta error de: TypeError: exphbs.e is not a function Deben agregar .engine a exphbs. Queda así: app.engine('.hbs', exphbs.engine
@ayerotta34723 жыл бұрын
Gracias me funcioni!! Solo que cuando pongo "localhost:3000/users/signin" me marca error "Cannot GET /users/signin"
@JoseSanchez-gs3kz3 жыл бұрын
muchisimas gracias
@josefigueredo80533 жыл бұрын
a mi me sale y lo coloco y no se arregla
@davidmartinalvarez9782 жыл бұрын
Heroe sin capa
@NameGFX2 жыл бұрын
eres un capo muchas gracias
@carlosdmarceleno42505 жыл бұрын
muchísimas gracias! Fazt excelente material para personas como yo que recién empiezan en este mundo del desarrollo web.
@luqezr3 жыл бұрын
Si alguien tiene este error "Handlebars: Access has been denied to resolve the property "title" because it is not an "own property" of its parent." tienen que agregar esto .lean() al find() const notes = await Note.find().lean()
@PedroLandauro3 жыл бұрын
gracias, eres un crack
@sebastiangomez63304 жыл бұрын
Desde Colombia muchisimas gracias, esto me ha servido un montón para aprender cosas de Node y de MongoDB que quiero aplicar a mi vida profesional
@melvincolmenares86653 жыл бұрын
Buenas Vengo A Solucionarles un Error Que Creo Que A Algunos Nos Paso En El Minuto 57:21 El Problema Es Que No Se Quiere Cambiar El Fondo A Negro Y Porque Sera?? Estuve Investigando Y Dure Una Hora Buscando El Error, Todo Estaba Bien Y No Habia Problemas Con La Sintaxis, En Eso Veo La Versión Que Esta Usando Fazt Del Frameworks De Bootstrap Y Veo Que Mi Versión Esta Muy Avanzada Era La Versión 5.0 Y La De Fazt Era 4.1.3 Entonces Decido Cambiar La Versión De Bootstrap Y Boom Error Solucionado No Se Porque Sera Pero Funciono Aquí Esta La Versión De Bootstrap Que Utilizo Fazt: Espero Haberte Ayudado
@blazecudi3 жыл бұрын
ya decia yo pq shusha mi jumbotron no tenia fondo y mis inputs estaban pegados XD nisiquiera me espere toparme con esto, gracias amigo, te mando tres toneladas de BUEN KARMA
@melvincolmenares86653 жыл бұрын
@@blazecudi jajaja 😂 gracias Bro 😁
@galeriagaming77073 жыл бұрын
gracias buen hombre
@jesulujan015 жыл бұрын
master de verdad por favor nunca dejes hacer vídeos y contribuir a la comunidad hacker que comienza a desarrollar software :D
@Jannerparejagutierrez5 жыл бұрын
Si alguien obtiene el siguiente error por consola: "(node:17116) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor." La solución fue agregando la linea recomendada por el mensaje: { useUnifiedTopology: true } mongoose.connect('mongodb://localhost/notes-db-app', { useCreateIndex: true, useNewUrlParser: true, useFindAndModify: false, useUnifiedTopology: true })
@hoeangeru24 жыл бұрын
Muchas gracias, me pasó lo mismo y ya se quitó el warning!
@youcrax5 жыл бұрын
Impresionante Fazt! Muchas gracias por explicar estos conceptos en un proyecto, ayuda muchisimo cuando ves todas las cosas juntas. Seguí así! Aprendi mucho con tus videos! Gracias!!!! PD: Es la primera vez que puedo terminar un video tan largo de programacion con un proyecto funcionando en su totalidad
@juanmorgana9235 жыл бұрын
Bro, tengo un error me dice. User.matchPassword is not a function. En la parte del login. El error me aparece en archivo passport.js.
@chiqui1234ok5 жыл бұрын
Fijate que es porque debes poner la u de 'User" en minúscula :) Creo que en el video lo dice. Saludos!
@julianmora29184 жыл бұрын
Cada vez que veo que hay un video que dura tres horas me emociono mucho y me preparo para darle al código.
@leonelrodriguez39674 жыл бұрын
Hola, asi hice para que me funcionara el metodo de Editar router.get('/notes/edit/:id', async (req, res) => { await Note.findById(req.params.id) .then(datos => { //console.log(datos); const contexto = { title: datos.title, description: datos.description } res.render('notes/edit-note.hbs', {note: contexto}) }) })
@MegaHaker30003 жыл бұрын
amigo sabes que entiendo el codigo y todo pero no me toma el id y me arroja este error =>>> titulo:datos.titulo, ^ TypeError: Cannot read property 'titulo' of null
@brah083 жыл бұрын
Esto deberia estar arriba tambien gracias por el aporte
@geisyalfonsomartinez88033 жыл бұрын
amigo, como hizo el methodo PUT ? gracias
@oscartrevinogonzalez84815 жыл бұрын
Gran video!! gracias, en verdad. Creo que tus videos son los mejores que he encontrado, y lo mejor de todo: gratuitos!!
@LaMagiadeReact3 жыл бұрын
Deberias tener mas seguidores :D con la calidad de este curso, pudieras añadir en la descripcion que es con express 3.0 para que funcione tal cual pero la verdad ayuda mucho este curso, ya casi termino el curso
@edmundodominguezagurcia72544 жыл бұрын
Termine el proyecto, muchas gracias Fazt, la verdad me ha ayudado muchisimo. Largo, pero vale la pena.
@giovannialexander19565 жыл бұрын
Heroe sin capa, me quedé hasta el último segundo, gracias por el contenido
@carlosmurillo70155 жыл бұрын
Increíble. Un agradecimiento, eres excelente y te admiro muchísimo. Muchas felicidades por esa facilidad.
@yanniosanchez90846 жыл бұрын
Buen video brother lo explica de forma muy profesional y sin desperdicio solo me toca decir mil gracias.
@tarriochu953 жыл бұрын
Hermoso video, no sabia nada de nodejs, nadamas lo tenia instalado y a travez de este video he podido ir aprendiendo ciertas cositas
@davidpalomeque47705 жыл бұрын
Espectacular el tutorial fazt ! Ayuda mucho que pongas un índice y lo dividas por partes.
@giamar30262 жыл бұрын
Están muy buenos tus videos, solo faltaría que respondas las preguntas, porque es frustrante seguir los pasos y comerte unas horas, ya que uno va retrocediendo y mirando de nuevo y de pronto quedar truncado y no poder avanzar, quiza es xq las versiones de dependencias son diferentes. Bueno es un detalle, muchas gracias x compartir tus conocimientos. Tomo clases de pago y la verdad que si no fuera x lo que te expuse, me quedo con tu forma de explicar
@marcospacheco18214 жыл бұрын
Sou brasileiro, mas seus vídeos são tão bom que a língua não é um empecilho.
@ema.n.u.e.l4 жыл бұрын
Gracias Fazt ! Tus vídeos son 100% comprensibles
@helmerivangaleanochamorro8915 жыл бұрын
Muchas gracias Fazt, es un tutorial muy completo basado en ejemplos practicos y me a servido mucho. Te felicito por el conocimiento que tienes y la habilidad para compartirlo.
@Daker11Gamer2 жыл бұрын
Para todos los que estan viendo este video en 2022, Handlebars se actualizó y el código que utiliza Fazt esta obsoleto, varias partes del video necesitan actualización. Escribiré varias partes del código que necesitan ser cambiados: -->Para index.JS en //Setings; cerrar los paréntesis internos en 'views' app.engine('.hbs', exphbs.engine({ defaultLayout:'main.hbs', layoutsDir: path.join(app.get('views'), 'layouts'), partialsDir: path.join(app.get('views'), 'partials'), extname: '.hbs' })); -->Para el database.js; Ya no es necesario escribir las otras tres líneas de código mongoose.connect('mongodb://localhost/notes-db-app') .then(db => console.log('Db is connected')) .catch(err => console.log(err)); -->Para notes.js; es necesario el método .lean() luego de Note.find() router.get('/notes', async(req, res) =>{ const notes = await Note.find().lean(); res.render('notes/all-notes', { notes }); }); créditos a @Juan Amieva, @Valerio Funk por su aportación
@SantiagoMartinez-wu8ct2 жыл бұрын
hola, en la parte del min 2:50:00 donde corrige User por user, me salta error en la consola, diciendo que .matchPassword is not a function y se me rompe la pagina. Sabes que puede ser? lo hice tal cual, el resto de los codigos desactualizados lo fui solucionando, pero me quede trabado en esta parte.
@Kitsuu172 жыл бұрын
Neta gracias!!
@kastikas2 жыл бұрын
Messirvio al dia de la fecha ... :V
@urielmiranda30972 жыл бұрын
Que pasa cuando pongo el app.set engine y cuando lo configuro me aparece que necesito un metodo
@kastikas2 жыл бұрын
@@urielmiranda3097 Que raro, has inicializado bien arriba algo asi : const exphbs = require('exphbs'), a partir de ahi si quieres un metodo de exphbs solo le pones el punto, que es lo que luego se hace: app.set('hbs', exphbs.engine({})) y en ese momento es que le estas diciendo , Okey app seteame el hbs y ejecutame el metodo engine de exphbs con estos parametros. Te digo la verdad yo varias quize dejar de seguir haciendo el proyecto, porque llegaba un punto donde no me salia igual. Pero luego volvia para atras el video y revisaba todo de nuevo y a veces es un error tonto como no se en vez de name="email" pones otra cosa... 🤣🤣🤣
@yoelayan75223 жыл бұрын
2021 y este tutorial sigue funcionando, mil gracias!!! gran aporte de valor
@MiguelAngelMarroquinJordan6 жыл бұрын
Muchas gracias! En serio excelente explicación deberías de hacer cursos en Udemy, me encantaría comprarte cursos y ayudar a que sigas haciendo estos videos. Muy didácticos gracias
@gmansi6 жыл бұрын
O poner un enlace para que se puedan hacer "donaciones" en el mismo video, sería otra forma
@luisgonzalez054 жыл бұрын
Por si les pasa en el 2:22:41, y les sale el error : (node:24452) UnhandledPromiseRejectionWarning: Error: Invalid salt version Deben tener cuidado a la hora de pasar los parametros a la funcion bcrypt.hash, primero se pasa la cadena a encriptar y luego el salt. En mi caso lo tenia de la siguiente forma cuando me mostro el error: //Se encripta la contraseña y se almacena hash const _salt = await bcrypt.genSalt(10); const _hash = bcrypt.hash(_salt,pPasswordEncriptar); return _hash; La linea debe quedar: const _hash = bcrypt.hash(pPasswordEncriptar,_salt);