Desarrollo en BackEnd con Node.js
1. Introducción a Node.js
2. El Node Package Manager (npm)
3. Instalación de Node.js
4. Creación de un servidor
5. Análisis de los principales módulos Node.js
6. Utilización de JavaScript y nuevas características de ES7
7. Control de versiones con Git y GitHub
8. Introducción a express. Instalación y configuración
9. Callback Hell
10. Promise y Fetch
11. Asincronía
12. Fundamentos de RESTFul
13. Implementación de un API REST con Node.js
14. Interacción con el front. Fundamentos de React y Angular
15. Acceso a bases de datos NoSQL desde Node.js. MongoDB y DynamoDB
16. Operaciones Scan
17. Utilización de Amazon RDS
Desarrollo en BackEnd con Node.js
Conceptos iniciales
¿Qué es Node.js?
¿Para qué se usa?
ECMAScript 6
Módulos JS
npm
Código bloqueante y código no bloqueante
Desarrollo en BackEnd con Node.js
Desarrollo en BackEnd con Node.js
Entorno de desarrollo
IDE: Visual Studio Code
Extensiones:
Configurar:
Format on Paste
Format on Save
settings.json:
Desarrollo en BackEnd con Node.js
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"typescript.suggestionActions.enabled": false
Entorno de desarrollo
Desarrollo en BackEnd con Node.js
Desarrollo en BackEnd con Node.js
Git - comandos básicos para el curso
Clonar un repositorio:
git clone URL
Descargar última versión del repositorio:
git pull origin master
Desarrollo en BackEnd con Node.js
Git - configuración proxy
git config --global http.proxy http://username:password@host:port
git config --global https.proxy http://username:password@host:port
Desarrollo en BackEnd con Node.js
Desarrollo en BackEnd con Node.js
npm
Repositorio de paquetes distribuibles
Paquetes globales y paquetes locales
La carpeta node_modules
El archivo package.json:
npm init -y
Registro de dependencias
Dependencias de desarrollo y de producción
scripts
Desarrollo en BackEnd con Node.js
npm - comandos
Instalar un paquete globalmente:
npm install -g paquete
Instalar un paquete de producción:
npm install paquete
Instalar un paquete de desarrollo:
npm install paquete --save-dev
Instalar todas las dependencias:
npm install
Instalar las dependencias de producción:
npm install --production
Listar paquetes instalados:
npm list --depth=0 (locales)Desarrollo en BackEnd con Node.js
npm - comandos
Desarrollo en BackEnd con Node.js
Lanzar el ejecutable de un paquete:
npx ejecutable
npm - configuración proxy
npm config set proxy http://username:password@host:port
npm config set https-proxy http://username:password@host:port
Desarrollo en BackEnd con Node.js
Desarrollo en BackEnd con Node.js
Desarrollo en BackEnd con Node.js
JavaScript
Interpretado, compilado y ejecutado en el navegador o en el entorno de ejecución Node.js
Cada navegador programa su propio motor de JS (Node.js usa V8)
Estandarización: ECMAScript
La versión ES6 o ES2015
Desarrollo en BackEnd con Node.js
JSON
Sintaxis del formato JSON
Tipos de datos
Mapeado con objetos de JS
{
"cursos": [
{
"nombre": "Desarrollo en BackEnd con Node.js",
"horas": 20,
"presencial": false,
"alumnos": [
{
"nombre": "Juan Luis",
"apellidos": "Domingo Suárez",
"edad": 36
},
{
"nombre": "Carmen",
"apellidos": "González Díaz",
"edad": 39
},
{
"nombre": "Joaquín",
"apellidos": "Pérez Estivil",
"edad": 42
}
],
"dias": ["M", "X", "J", "V", "L"]
},
{
"nombre": "Control de versiones con Git",
"horas": 16,
"presencial": true,
"alumnos": [
{
"nombre": "Marta",
"apellidos": "García Cubierta",
"edad": 44
},
{
"nombre": "Carla",
"apellidos": "Arnal Ayuso",
"edad": 37
},
{
"nombre": "David",
"apellidos": "Corredera Pío",
"edad": 41
}
],
"dias": ["L", "M", "X", "J"]
}
]
}
ES6
let y const
let a = 3;
let a = 10; // Error
var a = 12; // Error
const b = 10;
b = 3; // Error
const obj = {
x: 10,
y: 12
}
obj.x = 15; // OK
obj = { // Error
x: 15,
y: 12
}
Desarrollo en BackEnd con Node.js
ES6
Desarrollo web avanzado con Node.js
let y const
Template literals
let nombre = "Antonio";
let cuadrado = function(x) {
return x * x;
}
let n = Math.floor(Math.random() * 10);
let saludo1 = "Hola, " + nombre + ". El cuadrado de " + n + " es " + cuadrado(n) + ".";
let saludo2 = `Hola, ${nombre}. El cuadrado de ${n} es ${cuadrado(n)}.`;
Desarrollo en BackEnd con Node.js
ES6
Desarrollo web avanzado con Node.js
let y const
Template literals
for ... of
let nombres = ["Patricia", "Zacarías", "Miguel", "Maite"];
for (let i in nombres) {
console.log(nombres[i]);
}
for (let nombre of nombres) {
console.log(nombre);
}
let obj = {
x: 3,
y: 4
}
for (let i in obj) {
console.log(obj[i]);
}
let nombre = "Antonio Jesús";
for (let c of nombre) {
console.log(c);
}
Desarrollo en BackEnd con Node.js
ES6
Desarrollo web avanzado con Node.js
let y const
Template literals
for ... of
Funciones
Parámetros por defecto
function potencia(x, y = 2) {
return Math.pow(x, y);
}
console.log(`10 elevado a 8 es ${potencia(10, 8)}`);
console.log(`El cuadrado de 5 es ${potencia(5)}`);
Desarrollo en BackEnd con Node.js
ES6
Desarrollo web avanzado con Node.js
let y const
Template literals
for ... of
Funciones
Parámetros por defecto
Funciones anónimas
Funciones de primera clase
Funciones de orden superior
Función arrow:
(parámetros) => expresión_devuelta;Desarrollo en BackEnd con Node.js
const potencia = function (x, y = 2) {
return Math.pow(x, y);
}
const potencia = (x, y = 2) => Math.pow(x, y);
setTimeout(() => console.log("pausa"), 2000);
ES6
Desarrollo web avanzado con Node.js
Operador spread
Parámetros en funciones
Enviar varios parámetros a partir de un array
push y unshift
Copiar un array en otro
Copiar un objeto en otro
Extender un objeto
// function(a, b, c)
let nums = [1, 3, 6];
function sumar(a, b, c) {
console.log(a + b + c);
}
sumar(...nums);
// function(n parámetros)
let a = 3;
let b = 7;
let c = 8;
function sumar(...nums) {
let suma = 0;
for (n of nums) {
suma += n;
}
console.log("La suma es " + suma);
}
sumar(a, b, c);
// push y unshift
let nums1 = [1, 3, 6];
let nums2 = [0, 52, 15, 9];
nums1.push(...nums2);
console.log(nums1);
nums1.unshift(...nums2);
console.log(nums1);
// copiar un array
let nums1 = [1, 3, 6];
let nums2 = [...nums1];
// copiar un objeto
let num1 = {
parteEntera: 10,
parteDecimal: 2
}
let num2 = { ...num1 };
// Extender un objeto
let num = {
parteEntera: 10,
parteDecimal: 2
}
let numExtendido = {
...num,
separador: "."
}
Desarrollo en BackEnd con Node.js
ES6
Desarrollo web avanzado con Node.js
Desarrollo en BackEnd con Node.js
Clases
Propiedades y métodos
class A {
constructor(z) {
this.x = 3;
this.y = 10;
this.z = z;
}
suma() {
return this.x + this.y + this.z;
}
}
let a = new A(20);
console.log(a.suma());
ES6
Desarrollo web avanzado con Node.js
Desarrollo en BackEnd con Node.js
Clases
Propiedades y métodos
Herencia con extends y super()
class A {
constructor(z) {
this.x = 3;
this.y = 10;
this.z = z;
}
static getPI() {
return 3.14159;
}
suma() {
return this.x + this.y + this.z;
}
set zeta(z) {
this.z = z * 2;
}
get zeta() {
return this.z / 2;
}
}
class B extends A {
constructor() {
super(100);
this.x = 20;
}
suma() {
return this.x + this.z;
}
resta() {
return this.x - this.z;
}
}
let b = new B();
console.log(b.suma());
console.log(b.resta());
Métodos de los arrays
Desarrollo web avanzado con Node.js
Métodos:
map
let nombres = ["juan", "luisa", "amparo", "arturo"];
nombres = nombres.map(nombre => nombre.toUpperCase());
console.log(nombres);
Desarrollo en BackEnd con Node.js
Métodos de los arrays
Desarrollo web avanzado con Node.js
Métodos:
map
filter
let personas = [
{
nombre: "juan",
edad: 15
},
{
nombre: "luisa",
edad: 35
},
{
nombre: "amparo",
edad: 17
},
{
nombre: "arturo",
edad: 32
}
];
let mayoresEdad = personas.filter(persona => persona.edad >= 18);
console.log(mayoresEdad);
Desarrollo en BackEnd con Node.js
Métodos de los arrays
Desarrollo web avanzado con Node.js
Métodos:
map
filter
reduce
let nums = [2, 4, 10, 15, 12];
let suma = nums.reduce((x, y) => x + y);
let objs = [
{
x: 3,
y: 2
},
{
x: 8,
y: 10
},
{
x: 10,
y: 15
}
]
let sumaX = objs.reduce((x, o2) => x + o2.x, 0); // Método 1
let sumaX = objs.map(o => o.x).reduce((x, y) => x + y); // Método 2
Desarrollo en BackEnd con Node.js
Métodos de los arrays
Desarrollo web avanzado con Node.js
Métodos:
map
filter
reduce
forEach
let notas = [
{
nombre: "juan",
nota: 6
},
{
nombre: "luisa",
nota: 8
},
{
nombre: "amparo",
nota: 4
},
{
nombre: "arturo",
nota: 3
}
];
let notasAprobados = notas.forEach(nota => {
console.log(`${nota.nombre} ha sacado un ${nota.nota}..`)
})
Desarrollo en BackEnd con Node.js
Desarrollo web avanzado con Node.js
Desarrollo en BackEnd con Node.js
Módulos
Desarrollo web avanzado con Node.js
Importar: require()
Exportar:
exports.
module.exports
Módulos del core
Módulos de terceros
Módulos locales
Desarrollo en BackEnd con Node.js
Desarrollo web avanzado con Node.js
Desarrollo en BackEnd con Node.js
Entornos
Desarrollo web avanzado con Node.js
Usar variables de entorno
Pasar la variable en package.json
Recoger la variable con process.env
La variable de entorno NODE_ENV
El paquete dotenv
Desarrollo en BackEnd con Node.js
Desarrollo web avanzado con Node.js
Desarrollo en BackEnd con Node.js
Utilidades
Desarrollo web avanzado con Node.js
nodemon
chalk
debug
commander
inquirer
Desarrollo en BackEnd con Node.js
Utilidades - chalk
Desarrollo web avanzado con Node.js
const chalk = require('chalk');
console.log(chalk.red('Error'));
console.log(chalk.blue('Todo bien'));
Utilidades - debug
Desarrollo web avanzado con Node.js
const debug = require('debug')('pruebas');
debug('Hola');
// package.json:
scripts: {
start: "SET DEBUG=pruebas & node index.js"
}
Utilidades - debug
Desarrollo web avanzado con Node.js
"outputCapture": "std",
"console": "integratedTerminal"
Configuración para que funcione con el modo debug del VS Code: añadir al launch.json
Utilidades - commander
Desarrollo web avanzado con Node.js
const program = require('commander');
program
.option('-s --saluda', 'Emite saludo')
.option('-t --texto [txt]', 'Texto')
.parse(process.argv);
if (program.saluda) {
if (program.texto) {
console.log(program.texto);
} else {
console.log("¡Hola!");
}
}
Utilidades - inquirer
Desarrollo web avanzado con Node.js
const inquirer = require('inquirer');
const prompt = inquirer.createPromptModule();
prompt([
{
type: 'confirm',
name: 'mayor',
message: '¿Estás en edad de trabajar?'
},
{
type: 'list',
name: 'profesion',
message: '¿Cuál es tu profesión?',
default: 0,
choices: [
{
name: 'Programador',
value: 'programador'
},
{
name: 'Cualquier otra',
value: 'otra'
},
{
name: 'Ninguna',
value: 'ninguna'
}
],
when: respuestas => respuestas.mayor
}]).then(resp => {
// resp es un array con las respuestas
});
Desarrollo web avanzado con Node.js
Desarrollo en BackEnd con Node.js
Asincronía
Desarrollo web avanzado con Node.js
Callbacks
El patrón callback(err, ...)
Callback hell
Promesas:
then()
catch()
async/await
Desarrollo en BackEnd con Node.js
Desarrollo web avanzado con Node.js
Desarrollo en BackEnd con Node.js
Peticiones HTTP - cliente
Desarrollo web avanzado con Node.js
El paquete node-fetch
Promesas
Recoger la respuesta en formato JSON
Desarrollo en BackEnd con Node.js
Peticiones HTTP - servidor
Desarrollo web avanzado con Node.js
El módulo http
Express
Middlewares:
morgan
body-parser
Propios
Gestor de errores
Rutas
Desarrollo en BackEnd con Node.js
Desarrollo web avanzado con Node.js
Desarrollo en BackEnd con Node.js
Bases de datos
Desarrollo web avanzado con Node.js
Relacionales
NoSQL
Desarrollo en BackEnd con Node.js
MongoDB
Desarrollo web avanzado con Node.js
documentos = "colecciones"
El ODM Mongoose
Schema
Model
Queries
find, findOne
findById
create
Desarrollo en BackEnd con Node.js
RDS
Desarrollo web avanzado con Node.js
Gestor de BBDD relacionales
El ORM sequelize
Model
Queries
findAll, findOne
findByPK
create
Desarrollo en BackEnd con Node.js
Desarrollo web avanzado con Node.js
Desarrollo en BackEnd con Node.js
Links
Desarrollo web avanzado con Node.js
Desarrollo en BackEnd con Node.js