Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Módulos útiles

22/31
Recursos

Aportes 107

Preguntas 7

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta 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);
}

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.

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

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

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

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

Cuando utilizo express utilizo npm install bcryptjs

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

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

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

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

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.

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

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…

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


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?

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

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

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

Supongo que por ser versión node mas reciente.

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

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

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.

¿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();
/* 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

Excelente clase!!!

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

¡Este curso me ha encantado, el profesor es estupendo!!!

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

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

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

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

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.

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

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

npm i bcrypt no funciona, sale un error de que se necesita phyton para usarlo.

Excelentes librerías.

el sharp no me funciona con un link

In love with Sharp

const sharp = require('sharp')

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

Muy muy interesante!

excelente librerias importante conocerlas.

Quienes vieron el detalle con el nombre del archivo?

Este video es de mucha utilidad!

si instalo uan depedencia como sharp dentro de un init de npm este solo funciona para ese modulo o es global para otros proyectos???

Me agrada bastante la forma en que explica Carlos. Excelente profe.

me gusto mucho que con sharp pude convertir un .webp a jpg o png

Mas info sobre sharp en

https://sharp.pixelplumbing.com/

No me funciona el npm i sharp, se queda cargando, alguno tuvo ese inconveniente???

El poder que tienes con todo esto es intrigante…

@CodingCarlos es excelente; hace ver este tema, que de por si es interesante, más agradable todavía con el entusiasmo que le mete. FELICITACIONES y GRACIAS!!

Muy buena clase, me gustó la forma en que se explicó el tema, pero es importante que sepan que moment está deprecada, en la misma página de moment se proponen otras librerías a utilizar y la misma función Date de javascript ha mejorado mucho comparada como era cuando salió moment.

moment funciono bien…pero creo que hoy ya casi no se le da mantenimiento y JS tiene ya una libreria para manejar fechas y horas y etc. que es Date js. enlace a la docu https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Date

version con async/await y promises:

const bcrypt = require("bcrypt");

const originalPassword = "1234segura!";

const encrypt = async (data) => {
  const encrypted = await bcrypt.hash(data, 5);
  return encrypted;
};

const isOk = async (pass, encrypt) => {
  return await bcrypt.compare(pass, encrypt)
};

/** 
 * MAIN
 * */ 
encrypt(originalPassword)
  .then((encryptedPass) => {
    // se imprime el pass encryptado
    console.log(encryptedPass);
    return encryptedPass;
  })
  .then((encryptedPass) => isOk(originalPassword, encryptedPass))
  .then((isEncrypted)=> console.log(isEncrypted));

¡Qué buena clase, eh! Me pregunto si habrá un módulo para binarizar imágenes.