Nodejs y Mongodb Aplicación completa (Login, Registro,CRUD, ES6+, y más)

Поділитися
Вставка
  • Опубліковано 3 лют 2025

КОМЕНТАРІ • 904

  • @FaztTech
    @FaztTech  6 років тому +229

    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.

    • @XavierPC
      @XavierPC 6 років тому +1

      SUPER GENIAL FAZT !!! (like♥) GRACIAS POR TUS VIDEOS

    • @leroycarrasquero6491
      @leroycarrasquero6491 6 років тому +1

      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?

    • @JosueVader
      @JosueVader 5 років тому +1

      @@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.

    • @finnelhumano3326
      @finnelhumano3326 5 років тому

      Que geniooo !

    • @zeykilow7721
      @zeykilow7721 5 років тому

      Hay dios

  • @TanisJam
    @TanisJam 6 років тому +267

    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!

  • @williamromerovela
    @williamromerovela 5 років тому +136

    ¿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!

    • @AngelPC
      @AngelPC 4 роки тому

      Definitivamente así es, este hombre te explica todo cada linea de codigo"como con plastilina", te mastica todo

    • @kapitan18-1
      @kapitan18-1 4 роки тому +1

      @@AngelPC oye no me reconoce el npm porque??

    • @AngelPC
      @AngelPC 4 роки тому +1

      @@kapitan18-1 manda como lo estás colocando o que error te está mandando

    • @emersonperalesvillanueva8568
      @emersonperalesvillanueva8568 4 роки тому

      siCierto bro :'u

    • @TheLukeOMG
      @TheLukeOMG 4 роки тому

      @@kapitan18-1 proba con yarn

  • @revoldfmb
    @revoldfmb 6 років тому +19

    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

  • @MiikeEnCiel
    @MiikeEnCiel Рік тому +4

    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.

  • @SergioLotito
    @SergioLotito 3 роки тому +9

    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.

    • @perezg74
      @perezg74 2 роки тому

      Muchas gracias amigo, estaba rompiéndome la cabeza con ello

    • @HUNTER_PATROL
      @HUNTER_PATROL 2 роки тому

      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

    • @angelicavergara4129
      @angelicavergara4129 2 роки тому

      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

  • @tintanarrativa6507
    @tintanarrativa6507 4 роки тому +4

    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!

  • @elpucarlino
    @elpucarlino 2 роки тому +25

    Si tienes problemas con el express-handlebars acá esta corregido
    const express = require('express');
    const app = express();
    const path = require('path');
    const methodOverrride = require('method-override');
    const session = require('express-session');
    let exphbs = require('express-handlebars');
    //settings
    app.set('port', process.env.PORT || 3000);
    app.set('views', path.join(__dirname, 'views'));
    app.set('.hbs', exphbs.engine({
    defaultLayout: 'main',
    layoutsDir: path.join(app.get('views'), 'layouts'),
    partialsDir: path.join(app.get('views'), 'Partials'),
    extname: '.hbs'
    }));
    app.set('view engine', '.hbs');

  • @matiasbertoni1561
    @matiasbertoni1561 3 роки тому +11

    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 })
    })

  •  5 років тому +2

    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!

  • @ivanmeller1
    @ivanmeller1 5 років тому +4

    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.

  • @darkin5225
    @darkin5225 3 роки тому

    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.

  • @LordMegabite
    @LordMegabite 6 років тому +25

    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

  • @ehm1224
    @ehm1224 3 роки тому

    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.

  • @steventabango4790
    @steventabango4790 6 років тому +41

    Ojalá hubiese visto este video antes de mi entrevista de trabajo.

    • @Devniel54
      @Devniel54 5 років тому +1

      eso es lo que estoy haciendo yo V:

    • @jesushernandez1922
      @jesushernandez1922 4 роки тому

      @@Devniel54 Rttttttt Jajajjajajaja Eso es lo que ando haciendo jajaja

    • @javierjimenez3627
      @javierjimenez3627 4 роки тому +1

      @@jesushernandez1922 y Como te. Fue 👀 ?

    • @erickortiz6049
      @erickortiz6049 4 роки тому

      saben por que al colocar el comando mongod me sale error?

    • @gersongonzalez.4166
      @gersongonzalez.4166 4 роки тому

      @@erickortiz6049 lo tienes agregado al path?

  • @nelsons.775
    @nelsons.775 5 років тому +1

    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

  • @emersonperalesvillanueva8568
    @emersonperalesvillanueva8568 4 роки тому +25

    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',
    }));

  • @ramilo69
    @ramilo69 5 років тому

    No paro de aprender....simplemente tu canal es un autentico tesoro; gracias por todo y espero que te veas recompensado por todos estos tutoriales....

  • @rolifuentes
    @rolifuentes 3 роки тому +3

    Súbelo mil veces para darle mil veces LIKE!! Muchas gracias

  • @chonchilo
    @chonchilo 4 роки тому +1

    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.

  • @iG-MC5
    @iG-MC5 2 роки тому +13

    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);
    });
    });

  • @pacoalvarez5171
    @pacoalvarez5171 5 років тому +1

    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.

  • @Sotelord
    @Sotelord 3 роки тому +61

    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.

    • @v1bra387
      @v1bra387 3 роки тому

      hay un video que es la actualizacion de este, lo subio hace mes y medio

    • @adrielibarra7087
      @adrielibarra7087 3 роки тому

      @@v1bra387 Donde aparece el video actualizado?

    • @esteban1133
      @esteban1133 3 роки тому

      @@adrielibarra7087 en el canal Fazt Code

    • @hernansastre8732
      @hernansastre8732 2 роки тому

      @@v1bra387 donde?

    • @MrGasparilom
      @MrGasparilom 2 роки тому +5

      Uff, casi me vuelvo mono revisando y volviendo atras en el video para ver donde cometí el error ja ja ja

  • @csh5983
    @csh5983 4 роки тому +2

    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

  • @hugogalvez7985
    @hugogalvez7985 3 роки тому +14

    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

    • @Thecots
      @Thecots 3 роки тому +1

      grande coño

    • @saddamviera2596
      @saddamviera2596 3 роки тому +1

      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

    • @homerohernan
      @homerohernan 3 роки тому

      Pffff llevo horas buscando como solucionarlo, muchas gracias!!

    • @yeisondiaz8801
      @yeisondiaz8801 3 роки тому

      grande amigo llevaba un día buscando la solución.

  • @jato2130
    @jato2130 2 роки тому +1

    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.

  • @davidmorales1163
    @davidmorales1163 3 роки тому +45

    El equivalente de < class="form-group"> y < class="btn-block"> en Bootstrap v5 es < class="mt-3"> y respectivamente.

    • @diegohuapayarivera2551
      @diegohuapayarivera2551 3 роки тому +2

      Ty men, no sabia porque no funcionaba

    • @hugogalvez7985
      @hugogalvez7985 3 роки тому +1

      MUCHAS GRACIAS!! enserio! pero.. ¿por que paso esto?

    • @luqezr
      @luqezr 3 роки тому +2

      Media hora estuve viendo por que no funcionaba btn-block ._.
      gracias!!

    • @criistiansuarez3563
      @criistiansuarez3563 3 роки тому +3

      @@hugogalvez7985 porque se actualiza constantemente y mejora. como en todos los lenguajes

    • @bitshifter4615
      @bitshifter4615 2 роки тому

      Qué raro, a mí me funciona con form-group y btn-block

  • @pablogonzalezramirez7397
    @pablogonzalezramirez7397 6 років тому +1

    Felicitar al Creador de Este Video de mucha ayuda, rapida introducción y abarca los temas mas importantes, Muy Bien

  • @joaquimjairmerloluque3488
    @joaquimjairmerloluque3488 3 роки тому +6

    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

    • @granjuangamer2278
      @granjuangamer2278 3 роки тому +1

      joder, muchas gracias amigo por la solucion, estaba sufriendo por ese error, GRACIAS

  • @jvivasmora
    @jvivasmora 5 років тому

    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

  • @kastikas
    @kastikas 2 роки тому +11

    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({...}))

  • @pkmorsan
    @pkmorsan 6 років тому

    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.

  • @soycruzado
    @soycruzado 4 роки тому +12

    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

    • @Juanagogoolives
      @Juanagogoolives 4 роки тому

      Gracias crack! :)

    • @VictorRafaelMachadoArteaga
      @VictorRafaelMachadoArteaga 4 роки тому

      Funciona perfectamente!!

    • @luisandrescabezasvelez3050
      @luisandrescabezasvelez3050 4 роки тому

      eres un capo , solucionaste el inconveniente

    • @fernandofernando8382
      @fernandofernando8382 4 роки тому +3

      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

  • @hoeangeru2
    @hoeangeru2 4 роки тому +1

    No puedo creer que lo pude terminar... me tarde mucho pero ahora me queda estudiar el codigo.
    Gracias!!!!

  • @gersonmayer
    @gersonmayer 5 років тому +3

    Me demore 4 dias, valieron la pena, gracias por compartir!

    • @narutoshadown
      @narutoshadown 4 роки тому

      nomms es demaciado jajajaja creo que deberias dedicarte mas

    • @gersonmayer
      @gersonmayer 4 роки тому +1

      @@narutoshadown hoy en "opiniones que nadie pidió"...

  • @LaminaFerro
    @LaminaFerro 6 років тому +2

    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

  • @jhonoquendo6163
    @jhonoquendo6163 6 років тому +5

    Wooo, respetable brother, muchas gracias por compartir tal conocimiento, muy agradecido. Con ansias de seguir aprendiendo. Saludos.

  • @asd-123
    @asd-123 4 роки тому

    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

  • @Disconluis
    @Disconluis 6 років тому +3

    Ya era hora de un video asi! Gracias!

  • @salamandrasps3570
    @salamandrasps3570 5 років тому +1

    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.

  • @estuardomarroquin303
    @estuardomarroquin303 3 роки тому +5

    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})
    })
    })

    • @jhosimarpinto4769
      @jhosimarpinto4769 3 роки тому

      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.

    • @wandamon1152
      @wandamon1152 3 роки тому

      @@jhosimarpinto4769 tengo el mismo problema, al final usted pudo resolverlo??

    • @luisdavidmendez1166
      @luisdavidmendez1166 3 роки тому

      ​@@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.

  • @luisgaravito9648
    @luisgaravito9648 2 роки тому

    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

  • @zacsam1615
    @zacsam1615 6 років тому +5

    Sos un crack, saludos desde Argentina!

  • @oskar2684
    @oskar2684 5 років тому

    Hola Fazt, llevo unos 3 meses aprendiendo, ojala sigas haciendo vídeos así, son los que mejor explicados están.
    Gracias.

  • @tomasinlondon
    @tomasinlondon 6 років тому +1

    Lo he visto enterito y cada minuto merece la pena! Millones de gracias por tu ayuda!

  • @grbsql
    @grbsql 6 років тому +3

    Muy bien Fazt. Excelentes cursos. Muchas gracias

  • @keylerfernandotajtaj1084
    @keylerfernandotajtaj1084 2 роки тому

    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.

  • @kimberlygarcesperez5975
    @kimberlygarcesperez5975 3 роки тому +5

    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

    • @guidomr3158
      @guidomr3158 3 роки тому

      Muchas gracias!! Me solucionaste un error

    • @cajegoprosilveredits9949
      @cajegoprosilveredits9949 2 роки тому

      Gracias por tu aporte pero cuando reemplazo tu código no se me ejecuta el servidor, hay que hacer algo mas?

  • @DanniCZ
    @DanniCZ 2 роки тому

    wey ... gracias a ti conseguí trabajo como desarrollador ... Mil gracias!

  • @ArmandoHinojosaCcamaSARC
    @ArmandoHinojosaCcamaSARC 6 років тому +6

    Asuuu :O

  • @Leo-on2pd
    @Leo-on2pd 5 років тому

    @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.

  • @programacion3154
    @programacion3154 3 роки тому +6

    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.

    • @delficanas3562
      @delficanas3562 3 роки тому

      Me re sirvió! Estuve mucho tiempo buscando si había escrito algo mal. Muchas gracias!

    • @programacion3154
      @programacion3154 3 роки тому

      @@delficanas3562 Me alegra mucho

    • @PedroLandauro
      @PedroLandauro 3 роки тому

      gracias, eres un crack.

  • @robertramirez7153
    @robertramirez7153 4 роки тому +1

    Buenísimo el tutorial. Mi profesor de la Universidad lo está usando para enseñarnos NodeJS

  • @screamdust4724
    @screamdust4724 3 роки тому +4

    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

  • @miguelrocha5662
    @miguelrocha5662 4 роки тому +1

    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

  • @byRedHunter
    @byRedHunter 4 роки тому +6

    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. 😁

    • @miguelangellp1516
      @miguelangellp1516 4 роки тому

      eres un crack amigo, lo habia consultado en stackoverflow y lo tenian con las promesas, pero esta es mucho mas facil de comprender. Gracias

    • @alvarotapia9696
      @alvarotapia9696 4 роки тому

      Buena maquinola

    • @luisfarco5522
      @luisfarco5522 4 роки тому

      Eres grande amigo Gracias

    • @TheCharlie_98
      @TheCharlie_98 4 роки тому

      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

    • @miguelangellp1516
      @miguelangellp1516 4 роки тому +1

      @@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.

  • @grbsql
    @grbsql 6 років тому

    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.

  • @lalibertadavanzamendoza
    @lalibertadavanzamendoza 3 роки тому +5

    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().

    • @omarnavarro369
      @omarnavarro369 3 роки тому

      Gracias!!

    • @sofc223
      @sofc223 3 роки тому

      Muchas gracias! Andaba desesperada por que no encontraba la solución a este error, te mando un beso!

  • @javierenriquemendozamercad6022
    @javierenriquemendozamercad6022 6 років тому

    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.

  • @richardcarmonaestrada5920
    @richardcarmonaestrada5920 6 років тому +3

    y gratis ??? genial felicidades Fazt , suscrito y con la campana activa :)

  • @youcrax
    @youcrax 5 років тому +1

    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

  • @chrisytbexp6705
    @chrisytbexp6705 5 років тому +31

    Hola amigo fazt, quisiera saber si hay alguna forma de poder apoyarte monetariamente, patreon, paypal, etc
    Estoy muy agradecido con tus videos
    Sigue asi!

    • @hazlotumismo1419
      @hazlotumismo1419 5 років тому

      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...

  • @LorenzoJimenez
    @LorenzoJimenez 3 роки тому

    Dos años después sigue siendo muy útil. Muchas gracias

  • @ernestorodriguez7715
    @ernestorodriguez7715 5 років тому +5

    npm i express express-handlebars express-session method-override mongoose passport passport-local bcyptd connect-flashg

    • @kapitan18-1
      @kapitan18-1 4 роки тому +3

      no compartas si lo vas a escribir mal jaja

  • @grbsql
    @grbsql 6 років тому +2

    Saludo Fazt. Excelentes cursos los que elaboras. Eres grande. Muchas gracias y felicitaciones.

  • @renantello8523
    @renantello8523 4 роки тому +4

    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

    • @ricardoisaza5780
      @ricardoisaza5780 3 роки тому

      Hola, lo pudiste resolver?

    • @Thothitox0120
      @Thothitox0120 3 роки тому

      como lo arreglaste

    • @MrGasparilom
      @MrGasparilom 2 роки тому

      @@Thothitox0120 const notes = await Note.find({}).lean().sort({date: 'desc'}); al find() debe agregarle los Corchetes y luego un .lean().

  • @kevinhiggins320
    @kevinhiggins320 6 років тому

    @Fazt, gracias por tomarte tu tiempo y compartir tu conocimiento. Con tus tutoriales he comenzado amar el desarrollo.

  • @valeriofunk5000
    @valeriofunk5000 4 роки тому +8

    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

    • @tony00110
      @tony00110 2 роки тому +1

      muchas gracias, me estaba volviendo loco por eso

    • @klan351
      @klan351 2 роки тому +1

      muchisimas gracias!

    • @Daker11Gamer
      @Daker11Gamer 2 роки тому

      Muchas Gracias, no entendía que pasaba

  • @rodymichel
    @rodymichel 4 роки тому

    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

  • @albertorivera8428
    @albertorivera8428 4 роки тому +3

    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

    • @albertorivera8428
      @albertorivera8428 4 роки тому

      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.

    • @albertorivera8428
      @albertorivera8428 4 роки тому

      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

    • @bac2421
      @bac2421 4 роки тому +1

      Gracias crack

  • @LaMagiadeReact
    @LaMagiadeReact 3 роки тому +1

    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

  • @webyipei2621
    @webyipei2621 6 років тому +6

    Primero de todo video genial.
    Segundo, como podemos hacer para que el login y registro consuma por frontend con Angular/vue/react ?

    • @emeldiaz393
      @emeldiaz393 6 років тому

      Fazt tiene un video donde hace una aplicación similar usando React, pero sin backend. Te dejo el link... ua-cam.com/video/204v5QXHlmc/v-deo.html

  • @giamar3026
    @giamar3026 2 роки тому

    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

  • @luqezr
    @luqezr 3 роки тому +3

    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()

  • @carlosdmarceleno4250
    @carlosdmarceleno4250 5 років тому

    muchísimas gracias! Fazt excelente material para personas como yo que recién empiezan en este mundo del desarrollo web.

  • @PabloBezzard
    @PabloBezzard 3 роки тому +6

    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

    • @ayerotta3472
      @ayerotta3472 3 роки тому +1

      Gracias me funcioni!! Solo que cuando pongo "localhost:3000/users/signin" me marca error "Cannot GET /users/signin"

    • @JoseSanchez-gs3kz
      @JoseSanchez-gs3kz 3 роки тому

      muchisimas gracias

    • @josefigueredo8053
      @josefigueredo8053 3 роки тому

      a mi me sale y lo coloco y no se arregla

    • @davidmartinalvarez978
      @davidmartinalvarez978 2 роки тому

      Heroe sin capa

    • @NameGFX
      @NameGFX 2 роки тому

      eres un capo muchas gracias

  • @julianmora2918
    @julianmora2918 4 роки тому

    Cada vez que veo que hay un video que dura tres horas me emociono mucho y me preparo para darle al código.

  • @albertorivera8428
    @albertorivera8428 4 роки тому +3

    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();
    });

    • @oggijuega
      @oggijuega 4 роки тому

      Excelente, handlebars no te deja acceder a las propiedades de user directamente, así que debes convertirlo en un texto.

  • @sebastiangomez6330
    @sebastiangomez6330 4 роки тому

    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

  • @Jannerparejagutierrez
    @Jannerparejagutierrez 5 років тому +8

    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
    })

    • @hoeangeru2
      @hoeangeru2 4 роки тому

      Muchas gracias, me pasó lo mismo y ya se quitó el warning!

  • @jesulujan01
    @jesulujan01 5 років тому

    master de verdad por favor nunca dejes hacer vídeos y contribuir a la comunidad hacker que comienza a desarrollar software :D

  • @leonelrodriguez3967
    @leonelrodriguez3967 4 роки тому +6

    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})
    })
    })

    • @MegaHaker3000
      @MegaHaker3000 3 роки тому

      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

    • @brah08
      @brah08 3 роки тому

      Esto deberia estar arriba tambien gracias por el aporte

    • @geisyalfonsomartinez8803
      @geisyalfonsomartinez8803 3 роки тому

      amigo, como hizo el methodo PUT ? gracias

  • @Graziel
    @Graziel 6 років тому +2

    2:58 yo pregunte eso, y me dieron un corazón y yo pensaba que me habían ignorado jaja buen vídeo :D

  • @juanmorgana923
    @juanmorgana923 5 років тому +2

    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.

    • @chiqui1234ok
      @chiqui1234ok 5 років тому +3

      Fijate que es porque debes poner la u de 'User" en minúscula :) Creo que en el video lo dice. Saludos!

  • @gramajocristianismael282
    @gramajocristianismael282 4 роки тому +1

    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-ms9zx
      @Nipro-ms9zx 2 роки тому +1

      hermano me salvaste la vida. gracias

  • @melvincolmenares8665
    @melvincolmenares8665 3 роки тому +4

    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

    • @blazecudi
      @blazecudi 3 роки тому +1

      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

    • @melvincolmenares8665
      @melvincolmenares8665 3 роки тому +1

      @@blazecudi jajaja 😂 gracias Bro 😁

    • @galeriagaming7707
      @galeriagaming7707 3 роки тому +1

      gracias buen hombre

  • @davidpalomeque4770
    @davidpalomeque4770 5 років тому

    Espectacular el tutorial fazt ! Ayuda mucho que pongas un índice y lo dividas por partes.

  • @edmundodominguezagurcia7254
    @edmundodominguezagurcia7254 4 роки тому

    Termine el proyecto, muchas gracias Fazt, la verdad me ha ayudado muchisimo. Largo, pero vale la pena.

  • @oscartrevinogonzalez8481
    @oscartrevinogonzalez8481 5 років тому +1

    Gran video!! gracias, en verdad. Creo que tus videos son los mejores que he encontrado, y lo mejor de todo: gratuitos!!

  • @giovannialexander1956
    @giovannialexander1956 5 років тому +1

    Heroe sin capa, me quedé hasta el último segundo, gracias por el contenido

  • @helmerivangaleanochamorro891
    @helmerivangaleanochamorro891 5 років тому

    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.

  • @yanniosanchez9084
    @yanniosanchez9084 6 років тому +2

    Buen video brother lo explica de forma muy profesional y sin desperdicio solo me toca decir mil gracias.

  • @tarriochu95
    @tarriochu95 3 роки тому

    Hermoso video, no sabia nada de nodejs, nadamas lo tenia instalado y a travez de este video he podido ir aprendiendo ciertas cositas

  • @carlosmurillo7015
    @carlosmurillo7015 5 років тому +2

    Increíble. Un agradecimiento, eres excelente y te admiro muchísimo. Muchas felicidades por esa facilidad.

  • @maxaqquepucho5023
    @maxaqquepucho5023 6 років тому

    Esta genial este video ya tengo con que practicar mas nodejs y mongoDB este fin de semana.. Gracias Fazt!!

  • @johneduardramirez386
    @johneduardramirez386 5 років тому

    Fazt, muchas gracias por dedicar tiempo y tu experiencia para ayudar y enseñar a otros, te felicito por ese talento, excelente tutorial me gusta mucho tu canal , un saludo

  • @Daker11Gamer
    @Daker11Gamer 2 роки тому +12

    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-wu8ct
      @SantiagoMartinez-wu8ct 2 роки тому

      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.

    • @Kitsuu17
      @Kitsuu17 2 роки тому

      Neta gracias!!

    • @kastikas
      @kastikas 2 роки тому

      Messirvio al dia de la fecha ... :V

    • @urielmiranda3097
      @urielmiranda3097 2 роки тому +1

      Que pasa cuando pongo el app.set engine y cuando lo configuro me aparece que necesito un metodo

    • @kastikas
      @kastikas 2 роки тому +1

      @@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... 🤣🤣🤣

  • @fernandosalazar7848
    @fernandosalazar7848 6 років тому

    Buenas noches, Fazt tus videos son excelentes mil gracias por compartir este material, se ve que la tenes clara. Saludos!!!

  • @mayrarincones8427
    @mayrarincones8427 4 роки тому +2

    Grande Fazt!! Recién terminé el video!! tardé muuuchoo jajaja pero lo logré! Igual tengo un problema que tengo que averiguar cómo solucionar y es que me sale el div de los mensajes de flash aunque no haya ningun mensaje aún x.x debo estar escribiendo el condicional mal (estoy usando ejs en vez de hbs), pero bueno, es algo que revisaré mañana. Ya hoy estoy FRITA. En fin, MUCHAS GRACIAS

    • @bossjaz
      @bossjaz 3 роки тому

      lograste resolver los temas de version?, voy como a la mitad y por lo visto me falta un buennn todavia

    • @mayrarincones8427
      @mayrarincones8427 3 роки тому +1

      @@bossjaz No, no!! nunca mas volví a revisar estooo!! debería anotarmelo a ver si lo resuelvo!
      Mucha suerte!!

    • @bossjaz
      @bossjaz 3 роки тому

      @@mayrarincones8427 gracias por la respuesta, saludos

    • @cristian_27
      @cristian_27 3 роки тому +1

      sos una genia con esas ganas de aprender que tenes,yo voy a probar de hacerlo con la version de express-handlebars 3.0.0 del video,con la version actual es un verdadero rope cabezas!!

    • @luisdavidmendez1166
      @luisdavidmendez1166 3 роки тому +1

      @@cristian_27 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.

  • @marcospacheco1821
    @marcospacheco1821 4 роки тому +2

    Sou brasileiro, mas seus vídeos são tão bom que a língua não é um empecilho.