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

121
Vistas
¿Cómo puedo establecer una variable dentro de una función?

obtuve esta función para verificar si el nombre de usuario es un administrador.

 module.exports = { checkAdmin: function(username){ var _this = this; var admin = null; sql.execute(sql.format('SELECT * FROM tbl_admins'), (err, result, fields) => { if (err) { logger.error(err.message); return; } adminArray = [] result.forEach(element => { if(element.Username == username){ adminArray.push(element.Username) } }); if (adminArray.includes(username)){ _this.admin = true; }else{ _this.admin = false; } }) return admin;

} }

Y esto está en el archivo Express.

 var check = Admin.checkAdmin(req.body.username); if (check == false) { console.log("Wrong") res.send({ message: 'Access denied' }); //bad request return; }

El SQL es correcto. El problema es establecer la variable "admin" dentro de la función SQL. La función devuelve "".

Gracias

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

No puedo evitar notar que toda su función checkAdmin tiene un estilo que no había visto antes. Déjame tratar de simplificarlo un poco, tal vez ayude con el problema.

 // Admin.js // Return a Promise, so it's easier // to deal with the asynchronous SQL Call function checkAdmin (username) { return new Promise((resolve, reject) => { sql.execute( sql.format('SELECT * FROM tbl_admins'), (err, result, fields) => { if (err) { return reject(err); } let foundUser = false; result.map((element) => { if (element.Username == username) { foundUser = true; } }); return resolve(foundUser); }); }); } module.exports = { checkAdmin };

👆 Primero devolvemos una Promesa. Luego nos quedamos dentro de la función de devolución de llamada de la llamada SQL. Si hay un error err rechazamos la Promesa. Si no hay ningún error, resolvemos la Promesa con un foundUser . Si encontramos el nombre de usuario deseado dentro de la tabla, foundUser será true , de lo contrario, será false .

Ahora tenga en cuenta que checkAdmin devuelve una Promesa ahora.

 // Router Controller const Admin = require('./Admin'); app.post('/some-route-only-admins-can-use', (req, res) => { const username = req.body.username; Admin.checkAdmin(username) .then((isAdmin) => { if (isAdmin) { return res.status(200).send({ message: 'Access granted' }); } else { return res.status(401).send({ message: 'Access denied' }); } }) .catch((err) => { logger.error(err.message); }); });

👆 Esto puede diferir de su código, pero con suerte debería darle la idea correcta.

problema con tu codigo

El problema principal con su método checkAdmin original es que la llamada SQL es asíncrona. En su código, no espera a que termine, sino que devuelve instantáneamente admin , que en ese momento siempre será null . Y null == false .

No pienses demasiado en this . Normalmente no es necesario modificarlo o utilizarlo.

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