C4 - Backend con Node.js
Full Stack amb React
Full Stack amb React
Full Stack amb React
Full Stack amb React
-
¿Qué es Node.js?
-
¿Para qué se usa?
-
ECMAScript 6
-
Módulos JS
-
npm
-
Código bloqueante y código no bloqueante
Conceptos iniciales
Full Stack amb React
Full Stack amb React
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
Full Stack amb React
Full Stack amb React
Módulos
-
Importar: require()
-
Exportar:
-
exports.loquesea
-
module.exports
-
-
Módulos del core
-
Módulos de terceros
-
Módulos locales
Full Stack amb React
Full Stack amb React
El objeto process
-
Propiedades útiles:
-
platform
-
env
-
version
-
argv
-
-
Métodos útiles:
-
exit(codigoStatus)
-
-
Eventos útiles:
-
beforeExit
-
Full Stack amb React
Full Stack amb React
Módulos del core: el módulo os
-
Métodos útiles:
-
freemem()
-
homedir()
-
version()
-
userInfo()
-
Full Stack amb React
Full Stack amb React
Módulos del core: el módulo path
-
Métodos útiles:
-
join(ruta1, ruta2, ruta3)
-
dirname(ruta)
-
basename(ruta, [ext])
-
extname(ruta)
-
const path = require("path");
const archivo = path.join(__dirname, "imagenes", "fary.png");
console.log(archivo);
const nombreFoto = path.basename(archivo, path.extname(archivo));
console.log(nombreFoto);
Full Stack amb React
Full Stack amb React
Módulos del core: el módulo fs
-
Métodos útiles:
-
readdir(ruta, callback)
-
rename(nombreAntiguo, nombreNuevo)
-
mkdir(nombreDirectorio, callback)
-
access(nombreArchivo, callback)
-
writeFile(nombreArchivo, datos, callback)
-
readFile(nombreArchivo, callback)
-
Full Stack amb React
Full Stack amb React
Entornos
-
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
Full Stack amb React
Full Stack amb React
Utilidades
-
nodemon
-
chalk
-
debug
-
prompt
-
commander
-
inquirer
Full Stack amb React
Full Stack amb React
Utilidades - chalk
const chalk = require('chalk');
console.log(chalk.red('Error'));
console.log(chalk.blue('Todo bien'));
Full Stack amb React
Full Stack amb React
Utilidades - debug
const debug = require('debug')('pruebas');
debug('Hola');
Full Stack amb React
Full Stack amb React
Utilidades - prompt
const prompt = require("prompt");
prompt.start();
prompt.get("nombre", (err, datos) => {
console.log(`Tu nombre es ${datos.nombre}`);
});
prompt.get("nombre").then((datos) => {
console.log(`Tu nombre es ${datos.nombre}`);
});
Full Stack amb React
Full Stack amb React
Utilidades - commander
const { program } = require('commander');
program
.option('-s, --saluda', 'Emite saludo')
.option('-t, --texto <txt>', 'Texto');
program.parse(process.argv);
const options = program.opts();
if (options.saluda) {
if (options.texto) {
console.log(options.texto);
} else {
console.log("¡Hola!");
}
}
Full Stack amb React
Full Stack amb React
Utilidades - inquirer
const inquirer = require('inquirer');
inquirer.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
});
Full Stack amb React
Full Stack amb React
Envío de email
-
El paquete nodemailer
-
El servicio de fake SMTP Ethereal
const nodemailer = require("nodemailer");
const transport = nodemailer.createTransport({
host: "smtp.ethereal.email",
port: 587,
auth: {
user: "brigitte92@ethereal.email",
pass: "Xjpm2pK2f8bxdF4kgz"
}
});
const mensaje = {
from: "remitente@email.com",
to: "destinatario@email.com",
subject: "Correo electrónico de prueba",
html: "<h1>Probando esto de enviar correos desde <strong>Node.js</strong></h1>"
};
transport.sendMail(mensaje, (err, info) => {
if (err) {
console.log(err);
} else {
console.log(info);
}
});
Full Stack amb React
Full Stack amb React
Peticiones HTTP (cliente)
-
El paquete node-fetch
-
Promesas
-
Recoger la respuesta en formato JSON
Full Stack amb React
Full Stack amb React
Servidor con express
-
El paquete http
-
El framework express
-
Cadena de middlewares
-
Cada middleware se registra con use() o con get(), put(), post(), etc.
-
Cada función middleware recibe req, res y next. Debe llamar a next() si no termina la cadena.
-
La cadena se termina con una response.
-
El middleware con cuatro parámetros es el manejador de errores general (err, req, res, next)
Full Stack amb React
Full Stack amb React
Node.js y MySQL
-
ORM - Object-relation mapping
-
El ORM Sequelizer
-
Establecemos una conexión y la exportamos
-
A partir de la conexión, creamos un modelo con un schema (forma que tiene una entidad concreta de una tabla)
-
El modelo tiene una serie de métodos para lanzar peticiones a la base de datos.
const { Sequelize } = require("sequelize");
const sequelize = new Sequelize({
host: "localhost",
database: "baseDeDatos",
username: "usuario",
password: "contraseña",
dialect: "mysql",
logging: funcionAnonimaQueRecogeUnMensajeYLoProcesa
});
module.exports = sequelize;
const { DataTypes } = require("sequelize");
const sequelize = require("../db");
const Alumno = sequelize.define("Alumno", {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
nombre: {
type: DataTypes.STRING(50),
allowNull: false
},
apellidos: DataTypes.STRING(100),
nota: {
type: DataTypes.DECIMAL(3, 1),
allowNull: false,
defaultValue: 0
}
}, {
tableName: "alumnos",
timestamps: false
});
module.exports = Alumno;
const Alumno = require("../db/modelos/alumno");
Alumno.findAll() // Devuelve todos los alumnos
Alumno.findAll({
where: { condiciones }
}) // Devuelve los alumnos que cumplan las condiciones
Alumno.findByPk(3) // Devuelve un alumno por su primary key
Alumno.findOne({
where: { condiciones }
}) // Devuelve el primer alumno que cumpla las condiciones
Alumno.create(alumno) // Crea el alumno
Alumno.update({ modificaciones }, { where: { condiciones }}) // Modifica los alumnos que cumplan las condiciones
Alumno.destroy({ where: { condiciones }}) // Elimina los alumnos que cumplan las condiciones
Full Stack amb React
Full Stack amb React
Node.js y MySQL
Full Stack amb React
Full Stack amb React
Node.js y MongoDB
-
ODM - Object-document mapping
-
El ODM Mongoose
-
Establecemos una conexión
-
A partir de la conexión, creamos un modelo con un schema (forma que tiene una entidad concreta de un documento)
-
El modelo tiene una serie de métodos para lanzar peticiones a la base de datos.
const mongoose = require("mongoose");
mongoose.connect(process.env.URL_MONGODB, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
useFindAndModify: false
}, err => {
if (err) {
// Gestionar el error
}
// Si llega hasta aquí, se ha conectado correctamente
});
const { Schema, model } = require("mongoose");
const AlumnoSchema = new Schema({
nombre: {
type: String,
required: true
},
apellidos: String,
nota: {
type: Number,
required: true
},
curso: {
type: Schema.Types.ObjectId,
ref: "Curso"
}
});
const Alumno = model("Alumno", AlumnoSchema, "alumnos");
module.exports = Alumno;
const Alumno = require("../db/modelos/alumno");
Alumno.find() // Devuelve todos los alumnos
Alumno.find({condiciones }) // Devuelve los alumnos que cumplan las condiciones
Alumno.findById(id) // Devuelve un alumno por su id
Alumno.findOne({ condiciones }) // Devuelve el primer alumno que cumpla las condiciones
Alumno.create(alumno) // Crea el alumno
Alumno.updateMany({ condiciones }, alumno) // Modifica los alumnos que cumplan las condiciones
Alumno.deleteMany({ condiciones }) // Elimina los alumnos que cumplan las condiciones
Full Stack amb React
Full Stack amb React
Node.js y MongoDB
Desenvolupador Web Full Stack amb React - C4-Backend amb Node.js
By mariogl
Desenvolupador Web Full Stack amb React - C4-Backend amb Node.js
Diapositivas para el curso Desenvolupador Web Full Stack amb React, del 2 de febrero al 27 de abril de 2021 en Barcelona. Módulo C3 - Introducción a las bases de datos SQL / NoSQL
- 320