Excelente profesor, todo es muy claro y rápido con él.
Odio los profesores que se tiran 1 hora explicando algo que podemos leer en las documentaciones de cada tecnología.
Introducción al proyecto del curso y su arquitectura
Arquitectura de un backend complejo
Estructuras de datos para nuestro proyecto
Creando la estructura principal
Estructura inicial del proyecto: API y rutas
Aislar el código de la base de datos
Rutas para usuarios
Documentación de nuestra API
Autenticación basada en tokens
JWT: Gestión de acceso
Autenticación: registro
Autenticación: login
Autenticación: cifrar contraseñas para evitar problemas de seguridad
Autenticación: gestión de permisos
Comprobar verificación con token
Gestión avanzada de errores: Throw
Almacenando datos: MySql
Base de datos real: MySQL
Completando la base de datos
Relacionando entidades: follow
Posts y likes
Microservicios en Node
Microservicios: pros y contras
Separando la base de datos a un microservicio
Conectando con nuestro microservicio de datos
Separando los posts a un microservicio
Gestión de microservicios con PM2
Puesta en producción serverless
Microservicios en Zeit Now, serverless y seguridad
Variables de entorno en Now y despliegue local
Cacheando nuestra aplicación
Caché como un microservicio. Redis
Conectando el microservicio a Redis
Conectar la API al caché
Puesta en producción en virtual machine
Desplegando los servicios de Node
Nginx como proxy inverso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Carlos Hernández
Aportes 17
Preguntas 3
Excelente profesor, todo es muy claro y rápido con él.
Odio los profesores que se tiran 1 hora explicando algo que podemos leer en las documentaciones de cada tecnología.
el mejor profesor de platzi, a que si
El profe Carlos debería dar todos los cursos de Node, una chulada todos los cursos que he tomando con el.
Es increible la cantidad de cosas que aprendimos en un solo curso
Este deberia ser el ultimo video de la seccion de cache.
esto estara alojado en el cache del navegador///???
Les comparto un método que sirve para implementar el cache de forma general a cualquier función que lea datos del store.
// store/addOns/cacheUtils.js
const cacheUtils = (cacheApi) => {
const apply = async (cache_id, {fn, args}) => {
let data = await cacheApi.get(cache_id);
if (!data) {
data = await fn(...args);
await cacheApi.upsert(cache_id, data);
}
return data;
}
cacheApi.apply = apply;
return cacheApi;
}
module.exports = cacheUtils;
// store/remote-redis.js
const RemoteDBMethods = require('./remote')
const cacheUtils = require('./addOns/cacheUtils')
const config = require('../config')
const {host, port} = config.redis
module.exports = cacheUtils(RemoteDBMethods(host, port));
// api/components/users/controller.js
module.exports = (store, cache) => {
async function list() {
const cache_id = TABLA;
return cache.apply(
cache_id,
{
fn: store.list,
args: [
TABLA
]
}
);
}
async function get(user_id) {
const cache_id = `${TABLA}_${user_id}`;
return cache.apply(
cache_id,
{
fn: store.get,
args: [
TABLA,
user_id
]
}
);
}
function followingUsers(userId) {
const cache_id = `${TABLA}_user_follow_from_user_${userId}`;
return cache.apply(
cache_id,
{
fn: store.query,
args: [
'user_follow',
{from_user: userId},
'JOIN users ON user_follow.to_user = users.id'
]
}
);
}
async function userFollowers(userId) {
const cache_id = `${TABLA}_user_follow_to_user_${userId}`;
return cache.apply(
cache_id,
{
fn: store.query,
args: [
'user_follow',
{to_user: userId},
'JOIN users ON user_follow.from_user = users.id'
]
}
);
}
}
Bien, entendido. Muy claro el ejemplo y la práctica.
Cache del microservicio de post hecho:
Así me quedó el controller de posts
async function list(){
let posts = await cache.list(TABLE)
if(!posts) {
console.info(`${TABLE} were not in cache, bringing from DB`)
posts = await store.list(TABLE)
cache.upsert(TABLE, posts)
} else {
console.log(`Bringing ${TABLE} from cache`)
}
return posts
}
Cuanto tiempo seria el óptimo para dejar en cache?
De los mejores profesores de platzi! 🎉😎
se está usando redis para chache es porque node corre en el server. Es correcto?
esta clase esta genial
excelente gracias
hace tiempo completé el curso pero… Ahora tengo un error que no entiendo, he visto miles de veces los archivos del curso y videos pero lo tengo tal cual en la logica de microservicios y es que hay un microservicio de muchos que he hecho que cuando lo ejecuto con nodemon, con node o con pm2 sale com dependente del main del package.json y sale un mensaje como esto
<code><code>nodemon MSV_events/event.js
[nodemon] 2.0.7
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node MSV_events/event.js index.js`
internal/modules/cjs/loader.js:818
throw err;
^
Error: Cannot find module '/var/www/ConfirmAppNodeJS/index.js'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:815:15)
at Function.Module._load (internal/modules/cjs/loader.js:667:27)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
at internal/main/run_main_module.js:17:47 {
code: 'MODULE_NOT_FOUND',
requireStack: []
}
luego veo el package.json y colico en el “main” la outa de mi index principal (api) y luego ejecuto nuevamente nodemon o node y me dice que pue el Puerto 3000 (donde tengo mi servicio principal y que si está andando) anda ocupado. miro el config.js y normal este microservicio en problema está haciendo un app.listend hacia un Puerto 3002 asi que no comprendo… igual en el script dice “executing nodemon MSV_event/event.js. api/index.js” pero yo no coloco e n el command el “api/index”… Cierro entonces el proceso principal, el index donde está mi carpet api y luego eject entonces este proceso y sale como que se ejecutan los dos a la vez “api escuchando en el Puerto 3000, microservicio de eventos escuchando en el Puerto 3002”
Excelente los consejos que el profesor brinda al final de la clase
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?