Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

584
Views
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; } }) }
over 4 years ago · Santiago Trujillo
1 answers
Answer question

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); })();
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!