No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Conectar la API al cach茅

27/29
Recursos

Aportes 16

Preguntas 3

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

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 鈥渕ain鈥 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 鈥渆xecuting nodemon MSV_event/event.js. api/index.js鈥 pero yo no coloco e n el command el 鈥渁pi/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 鈥渁pi 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