Proyecto Hola Usuario

Descripción

  • Realizar un programa que escriba en un fichero el texto siguiente:

    Hola usuario, tienes 25 años
    • Usuario se obtendrá de la variable de entorno

      $USERNAME
    • La edad se obtendrá de una variable

Objetivos

  • Entender el funcionamiento de los módulos

    • Utilizar módulos del núcleo (os, fs)

    • Crear un módulo sencillo

  • Usar sintaxis de ES6 (destructuring y template string)

Comenzar proyecto

mkdir holaUsuario
cd holaUsuario
touch app.js
code .

Añadir texto a un fichero

  • Función asíncrona:

console.log('Iniciando app');
const fs = require('fs');
// fs es un objeto con muchas funciones, ver api
fs.appendFile('saludo.txt', 'Hola Usuario');
  • Salida con warning:

(node:9493) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.
  • ¡Recoger error o éxito con función de callback para evitar warning!

console.log('Iniciando app');
const fs = require('fs');
// fs es un objeto con muchas funciones, ver api
fs.appendFile('saludo.txt', 'Hola Usuario', (err)=>{
  err ? console.log('Ha habido un error') : console.log('Todo ok');
});
  • Podríamos utilizar también una función síncrona:

console.log('Iniciando app');
const fs = require('fs');
try {
  fs.appendFileSync('saludo.txt', 'Hola usuario');
  console.log('Todo ok!');
} catch (err) {
  console.log('Ha habido un error');
}

Obtener el nombre del usuario

  • Utilizaremos el módulo OS para averiguar el nombre del usuario

const os = require('os');
const user = os.userInfo();
console.log(user); // para ver que datos tiene userInfo()

Implementación ES5

const fs = require('fs');
const os = require('os');
const user = os.userInfo();

console.log('Iniciando app');
const saludo = 'Hola ' + user.username;
fs.appendFile('saludo.txt', saludo, function (err) {
  err ? console.log('Ha habido un error') : console.log('Todo ok');
});

ES6: Destructuring

  • Mapeamos una o varias partes de un objeto a una o varias variables:

let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
console.log(x); // 1
console.log(y); // 2
console.log(z); // { a: 3, b: 4 }

ES6: Template Strings

var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and not ${2 * a + b}.`);
// "Fifteen is 15 and not 20."

ES6: Object Literal Property Value Shorthand

  • Antes (ES5):

function createMonster(name, power) {
  return { type: 'Monster', name: name, power: power };
}
  • Ahora (ES6):

function createMonster(name, power) {
  return { type: 'Monster', name, power };
}

Implementación ES6

const fs = require('fs');
const os = require('os');
const { username } = os.userInfo();

console.log('Iniciando app');
const saludo = `Hola ${username}`;
fs.appendFile('saludo.txt', saludo, (err) => {
  err ? console.log('Ha habido un error') : console.log('Todo ok');
});

Uso de módulos

  • Vamos a crear un módulo que sea el encargado de proporcionarnos el usuario

  • Creamos el fichero user.js con el siguiente texto:

    console.log('Cargando módulo para el usuario');
  • ¿Cómo lo cargamos dentro de nuestro app.js?

    const user = require ('./user.js')
  • Comprobamos la ejecución que muestra el texto del módulo requerido por consola.

Uso de variables y funciones de otro módulo en node

  • El objeto module tiene muchas propiedades, nos interesará module.exports

console.log(module)
  • module.exports puede ser una función, un objeto, un string...

  • Será ahí donde tendremos que crear un objeto con el nombre del usuario y la edad.

Solución proyecto

  • Fichero app.js:

const fs = require('fs');
const os = require('os');
console.log('Iniciando app');

const { username, edad } = require('./user')

const saludo = `Hola ${username}, tienes ${edad} años`;
fs.appendFile('saludo.txt', saludo, (err) => {
  err ? console.log('Ha habido un error') : console.log('Todo ok');
});
  • Módulo user.js:

const { username } = require('os').userInfo()
const edad = 25;
module.exports = { username, edad }

Ejercicio carga módulos

  • ¿Qué mostraría el siguiente programa?

  • ¿Y si comentamos la primera línea de app.js?

app.js:

require('./module1');
require('./module2');
console.log('Iniciando app');

module1.js:

console.log('Ejecutando módulo 1');

module2.js:

require('./module1')
console.log('Ejecutando módulo 2');

Salida ejercicio

  • El texto Ejecutando módulo 1 se muestra solo una vez

    • Ya está cargado previamente, se usa la caché y no se ejecuta

    • El texto Inicializando app sale después del console.log de los require (los require son síncronos).

Ejercicio leer ficheros

  • Crea dos ficheros numero1.txt y numero2.txt y escribe un número en cada uno

  • Crea un programa que:

    • Lea el contenido de los dos fichero y lo almacene en variables

    • Muestre por consola la suma de las variables

Solución lectura ficheros

const fs = require('fs')
const numero1 = fs.readFileSync('./numero1', 'utf-8')
const numero2 = fs.readFileSync('./numero2', 'utf-8')
console.log(`El resultado de la suma es  ${parseInt(numero1)+parseInt(numero2)}`)

Last updated