No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Módulos útiles

22/31
Recursos

Aportes 127

Preguntas 9

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

No se pero este hombre le pone una emoción a esto que no puedo explicar, lo mejor es que esa misma emoción siento yo node es demasiado.

La función de cifrado de bcrypt nos permite construir una plataforma de seguridad utilizando contraseñas encriptadas con Salt.

const bcrypt = require("bcrypt");
const password = "NuncaParesDeAprender2020";

bcrypt.hash(password, 5, function(err, hash){
	console.log(hash)
});
// La consola nos entregaria una contraseña distinta en cada oportunidad.

// Para evaluar si una contraseña concuerda con un hash
bcrypt.compare(password, hash, function(error, result){
	console.log(result)
	console.log(error)
})
// Nos va a responder **true** *(en el result)* o **false** *(en el error)* dependiendo si la contraseña puede generar el hash

Moment. js es una librería que nos permite solventar estos problemas e implementa un sistema de manejo de fechas mucho más cómodo.

const moment = require('moment')
const ahora = moment();

// Para formatear una fecha
ahora.format('MM/DD/YYYY HH:MM A'); // 04/11/2020 20:10 PM

// Para validad una fecha
moment('2020-04-11').isValid(); // Nos dara **true** o **false** dependiendo de si la fecha es valida o no

// Para encontrar cuanto tiempo ha pasado hasta hoy
moment('2018-04-11').fromNow(); // Hace 2 años

// Para agregar o eliminar años, días o meses
moment('2020-04-11').add(1, 'years'); // 2021-04-11
moment('2020-04-11').subtract(1, 'years'); // 2019-04-11

Sharp puede convertir imágenes grandes en imágenes JPEG, PNG más pequeñas y compatibles con la web de diferentes dimensiones.

const sharp = require('sharp')

// La siguiente reducira una imagen de 120x120 o cualquier tamaño a 80x80 y lo guardara en una imagen mas pequeña sin eliminr la original.
sharp('imagen.png').resize(80, 80).toFile('imagen_80x80.png');

La dislexia 😂

Hoy en día, según la documentación de moment,js , el proyecto a sido puesto en modo de mantenimiento. Recibiendo solo actualizaciones de seguridad, por lo que recomiendan no utilizarlo en futuros proyectos.

Recomiendan usar paquetes como Luxor, Day.js o la API de internacionalización de Javascript. Aquí un artículo acerca de ello.

4 alternatives to moment.js for internationalizing dates

bcrypt y sharp necesitan Python 2.7 para funcionar

OJO!!!
Gente NO utilicen moment, es una libreria que se creo hace mucho tiempo y sirvio en su tiempo, ahora hay mejores alternativas, la misma gente de moment te recomiendan usar otras librerias mas modernas

Sufriendo en PHP para conseguir una librería que me convirtiera un SVG en PNG
y acá con un npm install sharp y una línea de código ya lo tengo

sharp(‘corona.svg’).png().toFile(‘corona.png’);

console.clear();

const bcrypt = require('bcrypt');

const password = '1234Segura!';

let promise = new Promise(function (resolve, reject) {
    bcrypt.hash(password, 5, function (err, hash) {
        if (err != null) {
            reject(err);
        }
        resolve(hash);
    });
});

promise
    .then((result) => {
        passwordHash = result;
        console.log(result);
        saveToDatabase();
    })
    .catch((err) => {
        console.log(err);
    });

function saveToDatabase() {
    console.log('password saved...');
    console.log(passwordHash);
}

Prefiero usar promises que callbacks, son geniales 😄
bcrypt .hash(password, 2048).then((hash) => { console.log("perfecto, aqui esta el hash ", hash); }) .catch((error) => { console.log("sucedio un error"); });

Wow… este a sido uno de los mejores cursos que he tomado, no solo por el profesor y como transmite esa alegria de enseñar, sino tambien por las cosas utiles que aprendes y utilizas dia a dia.

En la actualidad Moment.js ya es un proyecto legacy. Es decir, ya no recibirá actualizaciones, ni cambios. El proyecto aún puede ser usado, pero incluso los desarrolladores de Moment recomiendan utilizar otras librerías para proyectos nuevos.
Se puede leer mayor información (dónde explican el por qué) en su sitio oficial: Moment.js | Docs.
Lista de librerías que recomienda Moment.js: Recomendaciones

Una librería bastante buena que he usado, es numeral.js https://www.npmjs.com/package/numeral

Muy buena para manejar números como precios de distintos formatos y como números nativos, sin perderse en las conversiones

asi es como podria quedar lo de bcrypt pero con promesas

const bcrypt = require('bcrypt');

const password = '1234Segura!';
let passwordHash

bcrypt.hash(password, 5)
    .then(hash => {
        console.log(hash)
        return hash
    })
    .then(hash => {
        return bcrypt.compare(password, hash)
    })
    .then(res => {
        console.log(res)
    })
    .catch(err => {
        console.log(err)
    })

Módulos útiles

Módulos que utilizaremos frecuentemente en nuestras aplicaciones como:

bycript : Permite encriptar un string generando un hash.

bycript.hash : Genera el hash del string, este método recibe por parámetros el string a encriptar, las veces que debe ejecutarse el script para generar un hash aleatorio y por ultimo una función que se encarga de capturar hash o el error que se presente.

bycript.compare : Permite comprar el hash con el string a encriptado y nos devuelve un true o false. bycript.compare recibe por parámetros el string a encriptado, luego el hash y por ultimo una función que captura la información o el error que se presente.

//importamos el modulo
const bcrypt = require('bcrypt');
//declaramos el pass o palabra a encriptar
const passworld = '1234Segura';
//bcrypt.hash no permite generar un hash
bcrypt.hash(passworld, 10, function(error, hash) {
  console.log(hash);
//bcrypt.compare nos devuelve un boleano si hash y contraseña son iguales
  bcrypt.compare(passworld, hash, function(err, res) {
    console.log(res)
  });
});

moment : Logramos manipular fechas de manera eficiente.
moment.format : Podemos darle un formato adecuado a nuestra fecha.

//importamos el modulo
const moment = require('moment');

let ahora = moment();
//establecemos el formato a usar
let ahoraFormat = ahora.format('HH:mm:ss');


console.log(ahoraFormat);

sharp : Permite trabajar con imágenes

//importamos el modulo
const sharp = require('sharp');
//ruta de la imagen a modificar
sharp('fondo-carro.jpg')
//scalamos la imagen a 500 de alto
  .resize(500)
//otorgamos una escala de grises
  .grayscale()
//generamos el archivo modificado
  .toFile('fondo-carro-small.jpg');

Cuando utilizo express utilizo npm install bcryptjs

Justo en un momento donde había perdido cierta motivación, la energía de este profesor me ha vuelto a motivar a continuar

Usando este comando lo pude instalar en linux

npm install --save bcryptjs && npm uninstall --save bcrypt

Y en Windows con el siguiente:

npm install -g node-gyp
npm install --g --production windows-build-tools

Despues:

npm install bcrypt

Hola, para quienes puedan tener el error : Input file missing

Encontré la solución.
Debemos utilizar las rutas absolutasal archivo.
En mi caso el código quedó de la siguiente manera:

const sharp = require('sharp');

sharp('/Users/uribarranco/Documents/Cursos/curso-fundamentos-nodejs/paquetes/utiles/original.png',)
    .resize(80)
    .toFile('/Users/uribarranco/Documents/Cursos/curso-fundamentos-nodejs/paquetes/utiles/resized.png')

Encontré la solución en el siguiente comentario de un issue del proyecto en Github:

Link a la solución

Módulos Útiles

Módulo para trabajar con fechas moment.

El paquete moment se puede instalar por medio de npm de la siguiente forma:

npm i moment

Este módulo permite ampliar las opciones de trabajar con fechas en Node, un ejemplo:

const moment = require('moment')

let now = moment()

console.log(now.format('DD/MM/YYYY - HH:mm'))

// Para validad una fecha
moment('2020-04-11').isValid(); 
// Nos dara **true** o **false** dependiendo de si la fecha es valida o no

// Para encontrar cuanto tiempo ha pasado hasta hoy
moment('2018-04-11').fromNow(); // Hace 2 años

// Para agregar o eliminar años, días o meses
moment('2020-04-11').add(1, 'years'); // 2021-04-11
moment('2020-04-11').subtract(1, 'years'); // 2019-04-11

En este ejemplo, el módulo moment permite obtener la hora y dar el formato que necesite. Además tiene más funciones para calcular los días entre distintas fechas, y mucho más.

Módulo para trabajar con imágenes sharp

Este módulo permite gestionar imágenes. La instalación es la siguiente:

npm i sharp

Permite manipular las imágenes con muchos métodos:

const sharp = require('sharp')

sharp('original.png').resize(80).toFile('resized.png')

En este caso, estamos cambiando el tamaño de la imagen original.png a un tamaño de 80px, y se crea un archivo llamado resized.png .

Más funcionalidades de Sharp

sharp

Módulo para trabajar con cifrado y contraseñas

El paquete se llama bcrypt la instalación se hace con npm de la siguiente forma:

npm i bcrypt

Este módulo permite el cifrado de las contraseñas que son guardadas en una base de datos para no almacenarlas en texto plano.

1. Encriptar la contraseña bcrypt .

Lo primero que debemos hacer es importar el módulo.

const bcrypt = require('bcrypt')

Luego, se debe tener una contraseña para poder ejecutar el método hash que existe en el módulo bcrypt .

const password = '1234Segura!'

bcrypt.hash(password, 5, function (err, hash) {
  console.log(hash)

  bcrypt.compare(password, hash, (err, res) => {
    console.log(res)
  })

})

En el código anterior, se utiliza el método .hash() , el cuál tiene 3 parámetros:

  • password , es la contraseña que va a ser encriptada.
  • 5 , el cuál puede ser cualquier número y hace referencia a la cantidad de veces que va a ser ejecutado el algoritmo de encriptación.
  • function , es una promesa que va a tener la información de la encriptación, tiene dos parámetros, el error y el hash , que es el resultado de la encriptación.

Para poder comparar si una contraseña digitada por un usuario u obtenida e algún sitio concuerda con el hash asignado, se utiliza el método compare , el cual tiene los mismos 3 parámetros y permite recibir un boolean que dice si el hash concuerda con la pass .

😮 Yo despues de esta clase awww cuanto poder

fechas (‘moment’), imágenes (‘sharp’) y password (‘bcrypt’)

wow… node.js es como el python del backend con modulos para todo!!
XD

Ojo, sharp puede llegar a tener problemas con las rutas relativas, tira un

error: Input file is missing

Este problema se soluciona trabajando con rutas absolutas.

const path = '/ruta/absoluta/hasta/el/archivo/imagen/';
sharp(path + 'image.png')
	.resize(80,80)
	.toFile(path + 'output.png');

Ya se discutio sobre este tema acá Ayuda, hago exactamente lo de la clase y siempre me sale el mismo error: Input file is missing a pesar de que tengo la image…

Cuando quieran bajar la imagen y no se les guarde en formato .webp. Pongan un signo de pregunta ‘?’ al final del enlace

https://static.platzi.com/media/public/uploads/original_219068e1-0543-480f-9f1b-e0844c5e06d2.png?

Comparto el ejemplo de Bcrypt con promesas.

Como bien dijo el usuario programadores, para windows funciona bcryptjs: “npm i bcryptjs”, si usamos bcrypt solo no funciona.

La dislexia 🤣

El “ahora” sale de una la fecha:
Moment<2021-07-23T21:50:52-05:00>

Supongo que por ser versión node mas reciente.

¿How to use async await with bcrypt? 👍

const bcrypt = require('bcrypt');

async function hashPassword(pass) {
  return await bcrypt.hash(pass, 5);
}

async function comparePassword(pass1, encrypted) {
  return await bcrypt.compare(pass1, encrypted);
}

async function main() {
  const password = 'pa55w0rd';
  const hashedPassword = await hashPassword(password);
  console.log(hashedPassword);
  const validPassword = await comparePassword(password, hashedPassword);
  console.log(validPassword);
}

main();

Así podrían usar bcrypt con Async/Await, ya que la function .hash() regresa una promesa, se puede manejar con async/await.

const bcrypt = require('bcrypt');

const password = '1234Safe!';

const createHash = async (password) => {
  try {
    const hash = await bcrypt.hash(password, 5);
    console.log(hash);
  } catch(err) {
    console.error(err);
  }

}

createHash(password);

Importante el manejo de bcrypt

const bcrypt = require('bcrypt');

const password = '1234Segura!';


//tambien funciona con promesas
bcrypt.hash(password, 5, (err, hash) => {
    console.log(hash);

    bcrypt.compare(password, hash, (err, res) => {
        //console.log(err);
        console.log(res);
    })
})

El dolor de cabeza del manejo de fechas, con esta es super.

const moment = require('moment');

let ahora = moment();

console.log(ahora.toString());
console.log(ahora.format('YYYY/MMM/DD - HH:mm'));
console.log(ahora.format('YYYY/MM/DD - HH:mm'));

Definitivamente existe para cada cosa un modulo ya hecho

const sharp = require('sharp');

sharp('gotcha.png')
    .resize(80,80)
    .toFile('resize.png');

sharp('gotcha.png')
    .grayscale()
    .toFile('resize1.png');

sharp('gotcha.png')
    .rotate(90)
    .toFile('resize2.png');    

hice una función básica usando sharp y la quiero compartir con ustedes. En principio está sencilla pero permite personalizar aun más los archivos.

const sharp = require('sharp');


function convert(route, size, name) {
    sharp(route)
        .resize(size)
        .toFile(`${name}.png`)
    console.log('El proceso se ha realizado con éxito');
}

convert('./original.png', 100, 'nueva');


a qui un ejemplo de bcrypt con promesas

const bcrypt = require ('bcrypt');

const password = '1234segura!';
const saltRound = 2048;

bcrypt.hash(password, saltRound)
      .then(hash => { 
            console.log("perfecto, aqui esta el hash ", hash); 
            bcrypt.compare(password,hash)
                  .then((result)=>{
                        console.log(result);
                  }).catch(error=>{
                        console.error(error);
                  });
      }).catch(error => { 
            console.error(error); 
      });

Pueden aprender más sobre estos módulos en sus documentaciones

BCRYPT
https://www.npmjs.com/package/bcrypt

MOMENT
https://momentjs.com/

SHARP
https://sharp.pixelplumbing.com/

Excelentes librerias, todas son maravillosas, al igual que la explicación

Excelente, hay que ver que estos módulos son de los más comúnes pero no son los únicos. Es genial ver la aplicabilidad de cada módulo en ejemplos concretos. Me llamaba mucho la atención NODE, ahora me gusta el doble

Puse un 90 por error y se me crasheo la maquina jajajajajajaa

En la actualidad, el mismo moment.js en su web desaconsejan el uso de la misma y por ejemplo recomiendan usar en su lugar

Si tienen algún problema al hacer npm i byript recomiendo que usen el paquete bycriptjs, se instala haciendo npm i bycriptjs

dayjs es mas liviano que moment y hacen tecnicamente los mismo

NODE sin este profesor no es lo mismo, ciento que le dieron el curso perfecto al profesor que le mete mucho respeto al don de educar, gracias Carlos Hernandez

‘La dislexia’ xDD

no sé si actualmente moment tenga habilitado el tree shaking y hace que nuestra aplicación pese más, hay una opción que se llama date fns que es lo mismo que moment, pero si cuenta con el tree shaking😁

Para el M1 genera error, como si el archivo no se encontrara. Según documentación aun no hay soporte 😭.

La liberia moment ya la han dejado de desarrollar, es recomendable dejar de usarla

11:10 justo estaba escuchando una música de suspenso xd

La dislexia🤣

MomentJS es un proyecto que ha entrado en modo de mantenimiento y que ellos mismos recomiendan usar otras alternativas como dayJS, si tienen nuevos proyectos es mejor que prueben otras herramientas pues ya no sacaran nuevos features o mejoraran la libreria. https://momentjs.com/docs/

Usando Bcrypt con promesas :

const bcrypt = require('bcrypt')
const hashPassword = (password) => {
  return new Promise ((resolve, reject) => {
    bcrypt.hash(password, 5, (err, hash) => {
      err ? reject(err) : resolve(hash)
    })
  })
}

let password = 'daniela123'
hashPassword(password).then(data => console.log(data)) 

Ya no se recomienda usar moment en proyectos nuevos, ellos mismos no lo aconsejan dado que el proyecto se quedó atrás y ahora hay mejores librerías que son más compatibles con el JavaScript actual.

Les dejo el mensaje de la documentación oficial y ahí mismo se recomiendan otras librerías en lugar de moment.

Igual se le agradece a moment todos los dolores de cabeza que me evitaron. Adiós vaquero…

mensaje-librería

Muchas veces he visto en los comentarios de platzi comentarios tipo: “Seria bueno que llevarán o explicaran como utilizarlo en el día a día”.
.
Bueno aquí esta esa clase, con información super valiosa y explicada de una manera increíble.

/* bcrypt se usa para encriptar contrasenas */

const bcrypt = require('bcrypt');

const password = '1234Segura!';

bcrypt.hash(password, 5, function(err, hash) {
    console.log(hash);
    bcrypt.compare(password, hash, function(err, res) {
        /* console.log(err); */
        console.log(res);
    })
});


/* bcrypt tambien funciona con promesas no solamente con callback */
/* la libreria moment sirve para trabajar con fechas */

const moment = require('moment');

let ahora = moment();

/* console.log(ahora); */

/* De esta manera podemos ver  la fecha usando moment con el formato que queramos */
console.log(ahora.format('YY/MM/DD'))

Excelente contenido super magistral esas recomendaciones de los módulos útiles

Muchas gracias Profe Carlos Hernández

Modulos vistos

  • Bcypt - Una librería para ayudarnos en passwords hash
  • Day.JS - Un alternativo a Moment.js con un moderno API
  • Sharp - Una librería para gestionar el tamaño de la imágenes

Aunque abajo ya se menciona, me parece importante repetirlo.

Moment ya está en modo de mantenimiento por lo que no es recomendable integrarlo a nuevos proyectos, las razones y las alternativas están dentro del comunicado en la página de moment.

https://momentjs.com/docs/#/-project-status/

Importante notar que moment.js anunció que no trabajará en nuevos features y solo se enfocará en estabilidad para aquellos proyectos que ya usan la libreria.

De hecho en el home de su página recomiendan utilizar “mejores alternativas modernas” junto con un blog post explicando todo.

++Los comandos para instalar los módulos: ++

npm i bcrypt

npm i moment

npm i sharp

Debería de existir un curso solo de esto !!! 😃 genial la clase

wooow sharp es genial, no tenía conocimiento de ella!!

excelentes librerías

Bcryp con ES6 y utilizando async/await

Para los que no les funciona el Sharp, en caso era la ruta que no la encontraba, y mi solución fue poner su ubicación relativa:

const sharp = require('sharp');

try {
    sharp('paquetes/utiles/magen.png')
        .resize(80)
        .grayscale()
        .toFile('paquetes/utiles/resized.png', (err, info) => {
          if (err) {
            console.error('Error al procesar la imagen:', err);
          } else {
            console.log('Imagen procesada exitosamente:', info);
          }
        });
  } catch (error) {
    console.error('Error general:', error);
  }

dando este resultado para verificar:

 Imagen procesada exitosamente: {
  format: 'png',
  width: 80,
  height: 80,
  channels: 3,
  premultiplied: false,
  size: 1267
}

Mucho cuidado con las funciones síncronas que sean pesadas ya que pueden bloquear el hilo principal de nodejs y congelar el servidor. Si las funciones u operaciones son pesadas (que no son instantáneas), lo recomendable sería manejarlas de forma asíncronas.

Aquí les dejo la versión con async await:
.

.
PD: esa sintaxis al rededor de la función asincrona es una forma de ejercutar la función al mismo tiempo que es declarada 😁💚

Todos viendo “orginal” 😳

La password mas seguro que he visto !!!

Estos conceptos han sido de muya ayuda la verdad!!
Es fascinante cuando se equivoca y la manera en cómo lo resuelve.

bcrypt

const bcrypt = require('bcrypt')

const password = '1234segura!'

bcrypt.hash(password, 5, (err, hash) => {
    console.log(hash)

    bcrypt.compare(password, hash, (err, res) => {
        //console.log(err)
        console.log(res)
    })
})

moment

const moment = require('moment');

let ahora = moment()

//console.log(ahora.toString())

console.log(ahora.format('YYYY/MM/DD - HH:mm'))

sharp

const sharp = require('sharp');

sharp('original.png')
    .resize()
    .grayscale()
    .toFile('resized.png');

ATENCIÓN:
El compañero @andresmotiva compartió el siguiente código:

const bcrypt = require("bcrypt");
const password = "NuncaParesDeAprender2020";

bcrypt.hash(password, 5, function(err, hash){
	console.log(hash)
});
// La consola nos entregaria una contraseña distinta en cada oportunidad.

// Para evaluar si una contraseña concuerda con un hash
bcrypt.compare(password, hash, function(error, result){
	console.log(result)
	console.log(error)
})
// Nos va a responder **true** *(en el result)* o **false** *(en el error)* dependiendo si la contraseña puede generar el hash

Si por la razón que sea en la línea donde esté

bcrypt.compare(password, hash, ...

les dice que hash está indefinido -como me pasó a mí- y quieren ver el resultado del compare rápidamente, les recomiendo intentar colocar bcrypt.compare dentro de bcrypt.hash. Adicionalmente, revisando la documentación a día de hoy 10 de diciembre de 2022 dentro de npm, sugieren utilizar genSalt. Les dejo el código tal y como lo tengo yo:

const bcrypt = require("bcrypt");
const password = "NuncaParesDeAprender2020";

const saltRounds = 10;
//const someOtherPlaintextPassword = 'not_bacon';
//pueden usar esta constante para hacer un bcrypt.compare, como sugieren en la documentación.
var Elhash;
bcrypt.genSalt(saltRounds, function (err, salt) {
    bcrypt.hash(password, salt, function (err, hash) {
     
        if (err) {
            console.error(err);
        }
        console.log(hash);
        bcrypt.compare(password, hash, function (err, result) {
    
           
            console.log(`El resultado: ${result}, el error: ${err}`);
        });
        
    });
});




me estan re gustando estas claseeees

Grandes herramientas!

La mejor clase sin ninguna duda 😃

Excelente clase!

Amé el módulo sharp 😍.
Adiós photoshop para web development!

//  Modulos utiles

// Estos modulos son buenos para encriptar, la "hora" y sharp que nos permine modificar archivos.

// Bycript
const bcrypt = require('bcrypt');

const password = '1234Security';

bcrypt.hash(password, 5, function(err, hash) {
    console.log(hash)

    bcrypt.compare(password, hash, function(err, res) {
        console.log(res)
    })
})

// Moment
const moment = require('moment');

let ahora = moment();

// console.log(ahora.toString());
console.log(ahora.format('YYYY/MM/DD - HH:mm'));

// Sharp

const sharp = require('sharp')

sharp('original.png')
    .resize(80)
    .grayscale()
    .toFile('resized.png')

Excelente clase!!!

Cabe mencionar que Sharp
puede ser usado con Callbacks, Promesas o Async/Await

Para los que actualmente les sale un error con sharp.js

const sharp = require('sharp')

sharp('./original_219068e1-0543-480f-9f1b-e0844c5e06d2.png')
    .resize(80)
    .grayscale() 
    .toFile('./resized.png')

Muy excelentes recursos los que enseñan en esta clase

excelentes recursos, soy nuevo en node, y ahora voy viendo la utilidad de esta gran herramienta

require(‘moment’): sirve para manipular agilmente fechas

require(‘sharp’): sirve para transformar imagenes

++npm init -y++: permite obviar las preguntas de instalación

Necesidad frecuentes en node:

trabajar las fechas
trabajar con imagenes
trabajar contraseñas

Interesantes libraries, aunque tuvo qlgunos updates.

Creo que a esta y todas las clases de este profesor les hizo falta un boton de like porque son demasiado buenas y bien explicadas, sabe alguien si tiene mas clases el?

La dislxia! genio!!!

Este curso es lo mejor que existe

Excelente clase para aprender lo básico de algunos módulos que nos puede servir de forma cotidiana en nuestro proyecto.

¿Se puede hacer un modulo que importe modulos?

¡excelente clase!

sharp, me encantó !

bcrypt - utilidades para encriptar
moment - Trabajar con fechas
sharp - tratamiento de imágenes

Qué MARAVILLOSA CLASE 😄 !!!