Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

582
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda