Recibo un error "UnhandledPromiseRejectionWarning: Rechazo de promesa no controlada". que no me permite realizar esta simple solicitud anterior:

app.get('/', function (req, res) {
  const GITHUB_AUTH_ACCESSTOKEN_URL = 'https://github.com/login/oauth/access_token'
  const CLIENT_ID = '123'
  const CLIENT_SECRET = '456'


    axios({
        method: 'post',
        url: GITHUB_AUTH_ACCESSTOKEN_URL,
        data: {
          client_id: CLIENT_ID,
          client_secret: CLIENT_SECRET
        }
      })
    .then(function (response) {
      alert('Sucess ' + JSON.stringify(response))
    })
    .catch(function (error) {
      alert('Error ' + JSON.stringify(error))
    })

});

No puedo entender por qué sucede esto porque estoy manejando correctamente el error con el método ".catch ()". ¿Cómo puedo realizar esta solicitud correctamente?

6
andreybleme 21 feb. 2018 a las 01:45

2 respuestas

La mejor respuesta

Alerta no existe de forma nativa en nodejs, por lo que el error probablemente provenga de .catch

Prueba en su lugar este código:

 axios({
        method: 'post',
        url: GITHUB_AUTH_ACCESSTOKEN_URL,
        data: {
          client_id: CLIENT_ID,
          client_secret: CLIENT_SECRET
        }
      })
    .then(function ({data}) {
      console.log('Success ' + JSON.stringify(data))
    })
    .catch(function (error) {
      console.log('Error ' + error.message)
    })

Si quieres un poco más "moderno"

// notice the async () =>
app.get('/', async (req, res) => {
    const GITHUB_AUTH_ACCESSTOKEN_URL = 'https://github.com/login/oauth/access_token'
    const CLIENT_ID = '123'
    const CLIENT_SECRET = '456'
    try {
        const { data } = await axios({
            method: 'post',
            url: GITHUB_AUTH_ACCESSTOKEN_URL,
            data: {
                client_id: CLIENT_ID,
                client_secret: CLIENT_SECRET
            }
        })
        console.log(data)
    } catch (err) {
        console.error(err.message)
    }
});
2
Daniel Krom 20 feb. 2018 a las 22:55

alert es un método de host, que se puede encontrar en el entorno del navegador, por lo que no existe en node.js.

  1. primero arroja un error en .then
  2. queda atrapado en catch,
  3. se lanza de nuevo ahora dentro de catch,
  4. ya que no hay nada para capturar el último catch, es manejado por el manejador de rechazo de promesa global.

Para tratar de manejar la situación, comience cambiando cada alerta con console.log y console.error respectivamente:

axios({
        method: 'post',
        url: GITHUB_AUTH_ACCESSTOKEN_URL,
        data: {
          client_id: CLIENT_ID,
          client_secret: CLIENT_SECRET
        }
      })
    .then(function (response) {
      console.log('Success ' + JSON.stringify(response))
    })
    .catch(function (error) {
      console.error('Error ' + error.message)
    })
1
Karen Grigoryan 20 feb. 2018 a las 22:55