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