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

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

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 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