Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

134
Vistas
función nodejs que devuelve mysql indefinido

Tengo una función que comprueba si un usuario es administrador o no. Si encuentra la identificación del usuario en la tabla de la base de datos, debe devolver true , de lo contrario, debe devolver false , pero me estoy quedando undefined . ¿Me puedes ayudar?

 function isAdmin(useruid) { db.query("SELECT * FROM admins", function(err,rows,field) { if(!err) { rows.forEach(function(element) { if (useruid === element.uid) { console.log("[is admin] Found admins!") return true; } else { console.log("[is admin] User is not admin!") return false; } }); } else { console.log(err); return false; } }) }

agregué ; en las líneas que faltan. Recibo el resultado de console.logs, pero la función sigue devolviendo undefined en lugar de false o true .

Parece que:

 function isAdmin(useruid) { db.query("SELECT * FROM admins", function(err,rows,field) { if(!err) { rows.forEach(function(element) { if (useruid === element.uid) { console.log("[is admin] Found admins!"); return true; } else { console.log("[is admin] User is not admin!"); return false; } }); } else { console.log(err); return false; } }) }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Como se señaló, la solución es más complicada de lo que podría sospechar dada la naturaleza asíncrona de Node. Hay varias formas de abordar el problema que presenta su pregunta, pero incluiré solo una aquí que es relativamente flexible y liviana.

La buena noticia es que su función isAdmin y la consulta que incluye se puede hacer mucho más simple, por lo que recogerá algunas líneas de código allí.

Dado que comienza con un UID y su objetivo es solo verificar que existe en la tabla, puede usar una consulta dirigida y omitir todos los bucles de resultados. Esto ahorrará tiempo y recursos tanto en Node como en MySQL.

Función actualizada Tenga en cuenta que ahora es una función async con una Promise . De esta manera podemos llamar más tarde y await los resultados. Además, db.query toma un argumento para ? marcador de posición Le pasamos nuestra variable useruid .

 const isAdmin = async (useruid) => { return new Promise((resolve, reject) => { db.query('SELECT uid FROM admins WHERE uid = ?;', useruid, function (error, results, fields) { if (error) reject(error); // when we get our results we can simply check for length // if we have length, there was a match // if we have no length, there was no match resolve(results.length ? true : false) }); }); };

Para llamar a la función... Debemos ajustar la función async si queremos aprovechar await

 (async function(){ let is_admin = await isAdmin(YOUR_UID_VALUE); console.log('is_admin', is_admin); })();
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda