A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Relacionando entidades: follow

16/29
Recursos

Aportes 13

Preguntas 3

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Un ayuda para los que tiene problemas con el id

const upsert = async (table, data) => {
    let row = []
    if(data.id){
        row = await get(table, data.id)
    }
    
    if (row.length === 0) {
      return insert(table, data);
    } else {
      return update(table, data);
    }
}

Alguien m谩s cree que esa funci贸n upsert est谩 generando m谩s problemas que soluciones?

En esta clase aprend铆 algo bien interesante, al pasar un bearer token a una petici贸n http podemos acceder al contenido del token desde el request:

req.user.id // regresa el contenido del jwt con el usuario

Les dejo mi reto, estuvo interesante porque me ayud贸 a entender c贸mo se utiliza mysql en node.

Ac谩 mi c贸digo https://github.com/behagoras/platzi-practico-node/tree/mysql-follow

api/components/user/network.js

router.get('/follow', secure('follow'), followers)
...
function followers (req, res, next) {
  controller.followers(req.user.id)
    .then((data) => {
      response.success(req, res, data, 201)
    })
    .catch(next)
}

api/components/user/controller.js

  const followers = (id) => store.get(`${TABLE}_follow`, { user_from: id })
  return {
    ...
    followers
  }

api/components/store/mysql.js

Modifiqu茅 un poco la funci贸n de get para que acepte diversos where, presten atenci贸n al query:

const get = async (table, where) => new Promise((resolve, reject) => {
  console.log('table', table)
  console.log('where', where)
  // console.log(id)
  connection.query(`SELECT * FROM ${table} WHERE ?`, where, (error, data) => {
    if (error) { return reject(error) }
    console.log(data)
    resolve(data)
  })
})

Creo que en el c贸digo hasta ac谩 hay un problema y es que no se puede crear nuevos usuarios.
Esto pasa porque el controller de user siempre le pasa un id a la funci贸n upsert de mysql.js.
Al cumplirse (data && data.id) siempre termina haciendo update.

Si trabajan con mysql, en lugar de setear el id con nanoid seria mejor dejar que lo administre el propio mysql, solo hay que poner el campo id como PRIMARY KEY y AUTO_INCREMENT

Los archivos que subi贸 el profesor tienen errores, verdad? no estoy obteniendo los errores del servidor, en cambio se queda cargando por la eternidad, descargue los archivos del profesor y los archivos parecen mezclados, super extra帽o

En esta clase he tenido que usar

jwt.sign(JSON.stringify(data), secret)

Porque los datos venian de la BS de datos en lugar de la request. No me funcinaba con:

jwt.sign(data, secret)

Ojala a帽adieran un curso de Sequelize.

No entiendo muy bien la funcion de upsert. Si si se supone que es para registro porque no se hace obligatorio el campo de password?

Mi solucion es esta:

En user/network a帽adir la ruta:

router.post("/followers", secure("follow"), followers);

Y su funcion correspondiente es:

function followers(req, res, next) {
  controller
    .followers(req.user.id)
    .then(data => {
      response.succes(req, res, data, 201);
    })
    .catch(next);
}

Ahora en user/controller a帽adir:

 function followers(from) {
    console.log(from, 'controller')
    return store.getFollowers( {
      user_from: from
    });
  }

Y por ultimo en store/msql:

function getFollowers(query) {
  return new Promise((resolve, reject) => {
    connection.query(
      `select u.* from user_follow as f, user as u where u.id = f.user_to and ?`,
      query,
      (err, res) => {
        if (err) return reject(err);

        resolve(res || null);
      }
    );
  });
}

El llamado seria asi:

POST http://localhost:3000/api/user/followers/

si alguien mas le dio este problema al realizar el follow
"ER_BAD_NULL_ERROR: Column 鈥榰ser_from鈥 cannot be null"

router.post('/follow/:id', secure('follow'), async (req, res, next) => {
  try {
    const data = await controller.follow(req.user.data.id, req.params.id);
    response.success(req, res, data, 201);
  } catch (error) {
    next(error);
  }
});