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.argv
de 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://inspect
pulsa donde ponga inspect.
escríbe algo en comentarios
😉 Gracias.