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

287
Visualizações
Manejo de error express en Next.js con axios

Estoy creando la funcionalidad de inicio de sesión para mi aplicación con una llamada asíncrona a mi API. Mi problema es que, aunque Express arroja un error, .then() aún se ejecuta con el error y no con la respuesta real del usuario y del token. No estoy seguro de por qué la función de inicio de sesión no 'captura' el error y en su lugar ejecuta el código dentro de .then().

Mi función expresa:

 // express funciton to login a user app.post('/api/users/login', (req, res) => { const { email, password } = req.body database.getUser(email, password, (error, user) => { console.log(error) if (error) { res.send({ error }) //errors are being handled here and are returned in the result of my frontend API call return } const token = jwt.generateToken({ userId: user.id, name: user.name, email: user.email }) res.send({ token: token, user:user }) }) }) //getUser function with mySQL query function getUser(email, password, callback) { const query = ` SELECT id, name, email, password FROM users WHERE email = ? ` const params = [email] connection.query(query, params, (error, results, fields) => { if (!results || results.length === 0) { callback(Error("Email is incorrect")) return } const user = results[0] bcrypt.compare(password, user.password, (error, same) => { console.log(error) if (error) { callback(error) return } if (!same) { callback(Error("Password is incorrect")) return } callback(null, user) }) }) } exports.getUser = getUser

Mi función de inicio de sesión en Next.js:

 const login = async ({ email, password }) => { return await axios.post('http://localhost:4200/api/users/login', { email: email, password: password }) .then((result) => { //when backend throws error, they are contained here as "result.error" still running these lines of code sessionStorage.setItem('token', result.data.token); axios.defaults.headers.common['Authorization'] = "Bearer " + result.data.token; console.log('user signed in'); }) .catch((err) => { //want errors to be directed here instead so I can properly handle them within the UI console.error("Username or password is incorrect!!") }) };

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Donde tiene .catch(error) solo se producirá un error si hay un problema con la promesa de axios que se puede completar.

En este caso, la promesa de axios se completa correctamente, sin embargo, luego se le devuelve un código de error válido por el cual no se puede completar el inicio de sesión.

Por lo tanto, un enfoque estaría dentro de su .then(result) para buscar ese tipo de resultado y hacer algo.

Entonces algo como

 .then((result) => { if (result.error) { ... return an error message to user ... } else { sessionStorage.setItem('token', result.data.token); axios.defaults.headers.common['Authorization'] = "Bearer " + result.data.token; console.log('user signed in');} })
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