Para los que tiene el siguiente error:
nanoid es not a function
const { nanoid } = require('nanoid')
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 23
Preguntas 15
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 nanoid@^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”
}
me sale error 500: “body”: “collection is not defined” no se donde es
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
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
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?