Problem validating form data (nodejs, express, jquery and handlebars)

Asked

Viewed 120 times

0

I have a problem in Nodejs when it comes to validating a form. I want, if there is an input incorrectly typed, to be shown an Alert pro user (without leaving the form route). For this, I put an if in case there is this error, the route to where I sent the data entered by the user return a res.json with the error message. The problem is that after Alert appears and I click ok to close it, I am redirected to the route that returned this res.json. I tried using preventDefault, but it’s not working. And I only wanted this event if I needed to show Alert, because if I don’t need it the user should be redirected to a route where a message will be displayed stating that the login has been completed.

The route that renders the form

Router.get('/signin', (req, res) => {
res.render('login-form', {
    layout: 'login.handlebars'
})

})

The route that receives the form data, to validate and return a json containing the error message, if any

Router.post('/check-signin', (req, res) => {

const [Login, Password] = [req.body.txtLogin, req.body.txtPassword]

 Client.signIn(Login, Password).then(response => {

    if (response.access) {

        res.redirect('/Auth/access-confirmed')
    } else {

        return res.json({
            errorMessage: response.msg
        })
    }
}) 

})

I also have a js client where I use Axios to get the error message and a button.click to, if there is an error message, it is shown in an Alert. But as I said, after I click close this Alert, I am redirected to the route that returned this error message.

const Axios = require('axios')
const $ = require('jquery')



const apiResponse = async () => {
  try {
    const {
      data
    } = await Axios.default.post('http://localhost:8081/Auth/check-signin')
    console.log('Valor de data: ')
    console.log(data)
    return data
  } catch (error) {
    console.log('Error: ' + error)
  }
}


//executado quando o usuário clica no botão sign-in
$("#btn-signin").click((e) => {

  const response = async () => {
    try {
      const res = await apiResponse()   
      if(res.errorMessage){
        alert(res.errorMessage)
        e.preventDefault()
      }
    } catch (error) {
      console.log(`Error: ${error}`)
      return false
    }
  }

  response()

})
  • but it is not in the route of the form that gives the error message? or you created a route to give the error warning?

  • The route /check-signin receives the data sent by the form and validates it. If the data is invalid it returns a json. On the client side, I’m using Axios so that when the user clicks on the button, he can go on the route and check if there is a returned json. If there is, an Alert will be displayed on the user screen. The problem is that the Axios seems to be going on the /check-signin route before the data sent from the previous route arrives on it.

  • but these data return at some point? it seems that Axios.default.post does not exist, it would be something like Axios.post, according to the documentation. No use

  • Well, he was returning the data. And using the preventDefault button, the data is not sent.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.