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

363
Views
¿Por qué mi llamada de respuesta está fuera de alcance y no funciona? NodeJs, Bcrypt, Express, MySQL

Estoy usando Nodejs y MySQL para validar las contraseñas de los usuarios. Tengo dificultades para acceder a mi objeto de respuesta (res) para enviar una respuesta al cliente. Por alguna razón, funciona por encima de mi función bcrypt pero no por debajo. Necesito acceder a él a continuación para poder enviar mi token JWT al cliente. Vea a continuación los ejemplos de código. Gracias.

 **WORKING EXAMPLE** **res.send(data) is properly sending data back to the client** app.post("/login", jsonParser,(req, res) => { let selectQuery = 'SELECT * FROM ?? WHERE ?? = ?'; let query = mysql.format(selectQuery,["users","username", req.body.username]); pool.query(query,(err, data) => { if(err) { console.error(err); } //works here---> res.send(data) let match = bcrypt.compareSync(req.body.password, data[0].password) console.log(match) match ? token = generateToken(data[0]): token = null }) })
 **NON-WORKING EXAMPLE** **res.send(data) is NOT sending data back to the client. TIMED OUT** app.post("/login", jsonParser,(req, res) => { let selectQuery = 'SELECT * FROM ?? WHERE ?? = ?'; let query = mysql.format(selectQuery,["users","username", req.body.username]); pool.query(query,(err, data) => { if(err) { console.error(err); } let match = bcrypt.compareSync(req.body.password, data[0].password) console.log(match) //not here----> res.send(data) match ? token = generateToken(data[0]): token = null }) })
 **The same code using try catch** app.post("/login", jsonParser,(req, res) => { let selectQuery = 'SELECT * FROM ?? WHERE ?? = ?'; let query = mysql.format(selectQuery,["users","username", req.body.username]); pool.query(query,(err, data) => { if(err) { console.error(err); } try { let match = bcrypt.compareSync(req.body.password, data[0].password) match ? token = generateToken(data[0]): token = null } catch (exception_var) { console.log('exception', exception_var) } finally { res.send(token) } }) })
 function generateToken(data) { const secret = process.env.JWT_SECRET; console.log('inside generate token!', data) const payload = { data: data.username, //department: data.department, subject: data.id, }; console.log(payload,'payload') const options = { expiresIn: "1d", }; return jwt.sign(payload, secret, options); }
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

bcrypt.compare es una función asíncrona. Entonces, puedes usarlo de dos maneras. Use la función de devolución de llamada o Use async await

 app.post("/login", jsonParser,(req, res) => { let selectQuery = 'SELECT * FROM ?? WHERE ?? = ?'; let query = mysql.format(selectQuery,["users","username", req.body.username]); pool.query(query, async (err, data) => { // Declare the function as async function if(err) { return console.error(err); } const match = await compare(req.body.password, data[0].password) // wait for the data from function const token = match ? generateToken(data[0]) : null res.send(token) }) })
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!