Descripción
Realizar un programa que escriba en un fichero el texto siguiente:
Copy Hola usuario, tienes 25 años
Usuario se obtendrá de la variable de entorno
La edad se obtendrá de una variable
Objetivos
Entender el funcionamiento de los módulos
Utilizar módulos del núcleo (os, fs)
Usar sintaxis de ES6 ( y )
Comenzar proyecto
Copy mkdir holaUsuario
cd holaUsuario
touch app.js
code .
Añadir texto a un fichero
Copy console.log('Iniciando app');
const fs = require('fs');
// fs es un objeto con muchas funciones, ver api
fs.appendFile('saludo.txt', 'Hola Usuario');
Copy (node:9493) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.
¡Recoger error o éxito con función de callback para evitar warning!
Copy 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:
Copy 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
Copy const os = require('os');
const user = os.userInfo();
console.log(user); // para ver que datos tiene userInfo()
Implementación ES5
Copy 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:
Copy 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
Copy 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
Copy function createMonster(name, power) {
return { type: 'Monster', name: name, power: power };
}
Copy function createMonster(name, power) {
return { type: 'Monster', name, power };
}
Implementación ES6
Copy 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:
Copy console.log('Cargando módulo para el usuario');
¿Cómo lo cargamos dentro de nuestro app.js?
Copy 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
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
Copy 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');
});
Copy 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:
Copy require('./module1');
require('./module2');
console.log('Iniciando app');
module1.js:
Copy console.log('Ejecutando módulo 1');
module2.js:
Copy 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
Copy 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)}`)