NodeJs - primeros pasos - Creación proyecto, nodemon, debugging, peticiones http, paso de argumentos...
Tutorial de NodeJs, mediante la creación de un proyecto de Node, uso de Nodemon para refresco de los script/servidor, colores por consola, paso de argumentos, peticiones Http, y debuggear de una forma fácil y cómoda.
Puedes ver los ejercicios de node en github.com/jolugama/nodejs-ejemplos
- Package.json
- Nodemon
- Importar y exportar archivo
- Shebang - (#!)
- Colores de consola
- Paso de argumentos
- Peticiones Http
- Debugging node
Accedemos al api según version de node que estés usando.
Accede para usar métodos, clases y bibliotecas sin hacer ningun npm install
Package.json
Para cualquier proyecto node, se requiere siempre de la creación del package.json. Se puede construir manualmente o por comandos.
$ npm init
Package.json administra el proyecto, guardando toda dependencia, tan solo con hacer un npm install se descargaría todas las librerías.
Nodemon
Herramienta que monitoriza cualquier cambio de tu código y recarga el archivo llamado.
https://nodemon.io/
Instalación:
$ npm install -g nodemon
$ nodemon -v
ej: nodemon saluda.js Al modificar 'saluda' se volvería a reiniciar el código de ese archivo.
o en el caso de que lo queramos importar en el proyecto
$ npm install nodemon --save-dev
Importar y exportar archivo
Para no trabajar en un archivo toda la app. En este caso se crea una función 'mostrarAnimal', y luego se exporta mediante module.exports.
Exportar
mostrarAnimal = (color) => {
switch (color) {
case 'rojo':
console.log('🦀 🦞 🦐 🦜 🐙');
break;
case 'verde':
console.log('🐸 🐊 🐢 🦎 🐍 🐲 🐉 🦕 🦖');
break;
case 'azul':
console.log('🐳🐋🐬🐟🦈');
break;
default:
console.log('🦓 🦌 🐮 🐷 🐗 🐘 🦏 🦛 🐹 🐰 🐿')
break;
}
}
module.exports = {
mostrarAnimal
}
Importar
Tan fácil como poner 'require' con la ruta del archivo.
// importa archivo
const animales= require ('./01/animales');
// importa colores
var colors = require('colors');
// recupera primer argumento: node 01.saludaColores.js verde
// primer argumento es node (0)
// segundo argumento es el archivo llamado (1)
const argumento = process.argv[2];
console.log(`Argumento: ${argumento}`.bgYellow.red);
animales.mostrarAnimal(argumento);
Shebang - (#!)
#!/usr/bin/env node
Mediante esta linea, colocado al principio de un archivo node que queramos ejecutar, nos ahorramos tener que indicar node.
Es decir, en vez de node miArchivo.js, ejecutariamos miArchivo.js.
Es solo para entornos unix, y antes de su ejecución se debe dar los derechos de ejecucion: chmod +x miArchivo.js.
Colores de consola
La consola no tiene por qué ser tan aburrida, podemos darle un poco de color a los errores, mensajes, menus de scripts, ayuda…
- Puedes cambiar colores de forma nativa
console.log('\x1b[36m%s\x1b[0m', 'I am cyan'); //cyan
console.log('\x1b[33m%s\x1b[0m', stringToMakeYellow); //yellow
// Colores:
Reset = "\x1b[0m"
Bright = "\x1b[1m"
Dim = "\x1b[2m"
Underscore = "\x1b[4m"
Blink = "\x1b[5m"
Reverse = "\x1b[7m"
Hidden = "\x1b[8m"
FgBlack = "\x1b[30m"
FgRed = "\x1b[31m"
FgGreen = "\x1b[32m"
FgYellow = "\x1b[33m"
FgBlue = "\x1b[34m"
FgMagenta = "\x1b[35m"
FgCyan = "\x1b[36m"
FgWhite = "\x1b[37m"
BgBlack = "\x1b[40m"
BgRed = "\x1b[41m"
BgGreen = "\x1b[42m"
BgYellow = "\x1b[43m"
BgBlue = "\x1b[44m"
BgMagenta = "\x1b[45m"
BgCyan = "\x1b[46m"
BgWhite = "\x1b[47m"
- O con libería: Realmente hay muchas liberías que te puedes descargar. Esta es una de ellas.
npm install colors --save
// En fondo amarillo, letras rojas
console.log(`argumento: ${argumento}`.bgYellow.red);
Paso de argumentos
- Se puede usar
process.argvde forma nativa:
// obtención del primer parámetro
const argumento = process.argv[2];
// obtención de todos los parámetros
process.argv.forEach(function (val, index, array) {
console.log(index + ': ' + val);
});
- Yargs, mediante biblioteca Ayuda a crear herramientas de línea de comandos interactivas al analizar los argumentos y generar una interfaz de usuario elegante.
$ npm install yargs --save
let args = require('yargs')
.option('desde', {
alias: 'd',
default: 1
})
.option('hasta', {
alias: 'h',
default: 10
})
.option('salto', {
alias: 's',
default: 1
})
.argv
let desde = args.desde
let hasta = args.hasta
let salto = args.salto
console.log('yargs:',args);
for (let i = desde; i <= hasta; i += salto) {
console.log(i);
}
Otro ejemplo de yargs, lee un archivo e indica las lineas que tiene
var argv = require('yargs')
.usage('Uso: $0 <command> [options]')
.command('count', 'Cuenta las lineas de un archivo')
.example('$0 count -f foo.js', 'cuenta las lineas del archivo dado')
.alias('f', 'file')
.nargs('f', 1)
.describe('f', 'Load a file')
.demandOption(['f'])
.help('h')
.alias('h', 'help')
.epilog('Cogido de: https://github.com/yargs/yargs/blob/master/docs/examples.md')
.argv;
var fs = require('fs');
var s = fs.createReadStream(argv.file);
var lines = 0;
s.on('data', function (buf) {
lines += buf.toString().match(/\n/g).length;
});
s.on('end', function () {
console.log(lines);
});
Peticiones Http
Hay dos bibliotecas muy populares:
- axios–> usa promesas https://www.npmjs.com/package/axios
$ npm install axios --save
const axios = require('axios');
// 1ª forma, por promesa
axios.get(`url`)
.then(res=>{
})
.catch(e=> console.log('error',e));
// 2ª forma, por async await
const miFunction = async (url) => {
const resp = await axios.get(`https://loripsum.net/api/2/short/headers`)
const resp2 = await axios.get(`https://loripsum.net/api/2/short/headers`)
if (resp.status === 200 && resp2.status === 200) {
return `
${resp.data}
;) **********
${resp2.data}
`
}
}
miFunction().then((r, e) => {
console.log(r)
})
- request –> usa callback https://www.npmjs.com/package/request
Debugging node
Hay varias maneras. Mis preferidas son estas:
-
Visual Studio Code, pulsas f5, se abre el modo debugging. Puedes parar en varias lineas concretas usando breakpoints. Pincha a la izquierda del número de linea. -
chrome: En linea ponnode --inspect-brk miScript.js, en chrome,chrome://inspectpulsa donde ponga inspect.
escríbe algo en comentarios 😉 Gracias.