No tienes acceso a esta clase

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

Autenticaci贸n: registro

8/29
Recursos

Aportes 17

Preguntas 12

Ordenar por:

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

Para los que tiene el siguiente error:
nanoid es not a function

const { nanoid } = require('nanoid')

Vengo del mundo de Java y estoy acostumbrado a la creaci贸n de clases que servir谩n como payloads de request y response en cada petici贸n. Adem谩s de crear clases que simulan el modelo de la base de datos. 驴En NodeJS no se realiza esto? Veo que se crean objetos dentro de las funciones pero no creamos prototipos ni clases en ning煤n componente. Quiz谩s la creaci贸n de estas clases ayudar铆an a tener un c贸digo m谩s mantenible y robusto. 驴Qu茅 opinan?

{
鈥渆rror鈥: false,
鈥渟tatus鈥: 500,
鈥渂ody鈥: 鈥渁uth.upsert is not a function鈥
}

/user/controller.js

    async function upsert(body) {
        const user = {
            name: body.name,
            username: body.username,
        }
        if (body.id) {
            user.id = body.id
        } else {
            user.id = nanoid()
        }
        // checking if password exist
        if (body.password || body.username) {
            await auth.upsert({
                id: user.id,
                username: user.username,
                password: body.password,
            })
        }

        return store.upsert(TABLA, user);
    }```

Les recomiendo la extensi贸n Thunderbolt de VS Code que pr谩cticamente reemplaza a Postman y/o Insomnia para hacer esos m茅todos HTTP. Aqu铆 dejo un v铆deo de Youtube sobre ella

No se recomienda guardar las contrase帽as con los usuarios. Deben estar en diferentes entidades.

no me funciono nanoid. por lo tanto tuve que hacer algo r谩pido para seguir con el curso.

//const nanoid = require('nanoid');
const auth =  require('../auth');
const TABLA =  'user';

module.exports =  function (injecterStore) { 
    let store = injecterStore;
    if (!store) store = require('../../../store/dummy');

    function list() { 
        return store.list(TABLA);
    }

    function get (id) { 
        return store.get(TABLA, id);
    }

    async function upsert(body) {

        const user = {
            name: body.name,
            username: body.username
        }
        user.id = body.id ? body.id : Math.floor((Math.random() * 10000) ); //nanoid(10)

        if ( body.username || body.password ) {
            await auth.upsert({
                id: user.id,
                username: user.username,
                password: body.password
            })
        }
        
        return store.upsert(TABLA, user);
    }
     
    return {
        list,
        get,
        upsert
    }
 }```

/auth/controller.js

const TABLA = 'auth';

// auth entity
module.exports = function(injectedStore) {
    // validating if store exist
    let store = injectedStore;
    if (!store) {
        store = require('../../../store/dummy');
    }

    function upsert(data) {
        // make sure id is coming
        const authData = {
            id: data.id,
        }
        // spliting to create only data we need
        if (data.username) {
            authData.username = data.username;
        }

        if (data.password) {
            authData.password = data.password;
        }
        return store.upsert(TABLA, authData);
    }

    return {
        upsert,
    }
};```

Excelente gracias


Hola, estoy con este error. en la terminal no me imprime nada relevante. Estar茅 armando mal el json?

Muchas gracias!

Buen dia companeros, solo por curiosidad. al hacer el 鈥減ost鈥 en insomnia
"http://localhost:3000/api/user " En esta parte del codigo:

async function upsert(body) {
    const user = {
      name: body.username,
      username: body.username,
    };

    if (body.id) {
      user.id = body.id;
    } else {
      user.id = nanoid();
    }
    if (body.password || body.username) {
      await auth.upsert({
        id: user.id,
        username: body.username,
        password: body.password,
      });
    }

    return store.upsert(TABLE, user);
  }

Especificamente en este if:

if (body.password || body.username) {
      await auth.upsert({
        id: user.id,
        username: body.username,
        password: body.password,
      });
    }

El username tambien lo podemos requerir de body.username

Por que mandamos la contrase帽a en el body de la request?no creo que esta sea la forma mas segura de hacerlo

me sale error 500: 鈥渂ody鈥: 鈥渃ollection is not defined鈥 no se donde es

Otra recomendaci贸n podr铆a ser encriptar la password, as铆 aunque alguien lograr谩 acceder a los datos no podr铆a saber la contrase帽a. Una librer铆a que nos permite hacerlo y que tambi茅n nos permite validar f谩cilmente (por ejemplo en el login) es bcrypt: https://www.npmjs.com/package/bcrypt

Esta si audio desde el 9:30

La parte de auth, se podria reducir un poco mas, utilizando las ventajas de EcmaScript con el SPREAD Operator

      await auth.upsert({ password, ...user });