No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Autenticación: registro

8/29
Recursos

Aportes 20

Preguntas 14

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?

¡Hola! Vengo del futuro. Si instalaste Nanoid 4.0.0 o arriba (puedes verificar fácilmente en package.json), las soluciones de nanoid is not a function no te van a ayudar porque para llamar Nanoid hay que usar import(), pero Nanoid funciona diferente ahí y volverás a ver el mismo error en el servidor.

Mi solución a esto fue bajar la versión de Nanoid usando

npm i -S [email protected]^3.0.0

y llamarlo con const { nanoid } = require('nanoid') como viene en otros comentarios.

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

Otra solución para
nanoid es not a function

Definición de nano:
const nanoid = require(‘nanoid’);

Uso correcto:
nanoid.funcion();

Ejemplo:
nanoid.nanoid();

{
“error”: false,
“status”: 500,
“body”: “auth.upsert is not a function”
}

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
    }
 }```

/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);
    }```

Pues genial todo xD

{
	"error": false,
	"status": 500,
	"body": "nanoid is not a function"
}

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

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

/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 “post” 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: “body”: “collection 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