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
Was this helpful?