Como atualizar o token de acesso para um longo processo usando Javascript e Node.js.

Jan 08 2023
Neste tópico, simularemos como atualizar o token recuperado da API externa, com base em sua data de expiração, para evitar erro de token inválido. Primeiras coisas primeiro, certifique-se de ter o Node.
Foto de Danielle Rice no Unsplash

Neste tópico, simularemos como atualizar o token recuperado da API externa, com base em sua data de expiração, para evitar erro de token inválido.

Primeiras coisas primeiro, certifique-se de ter Node.jsinstalado em sua máquina.

Então, vamos criar nosso arquivo js, ​​por exemplo:process.js

/**
 * Make token
 * @param {number} length Token length
 * @param {number} expires_in Token expiration in seconds, default: 5 secs
 *
 * @return {Array}
 */
const makeToken = (length, expires_in = 5) => {
  let token = '';
  const characters =
    'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  const charactersLength = characters.length;
  for (var i = 0; i < length; i++) {
    token += characters.charAt(Math.floor(Math.random() * charactersLength));
  }
  return [token, expires_in];
};

/**
 * Utility to simulate asynchronous call
 * @param {number} milliseconds Time to wait in ms
 *
 * @return {Promise}
 */
const delay = (milliseconds) =>
  new Promise((resolve) => setTimeout(resolve, milliseconds));


/** Process */
(async () => {
  const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  const processStartDate = Date.now();

  let renewTokenDate = processStartDate;
  let [token, expires_in] = makeToken(40);
  let tokenIsInvalid = expires_in - 1 <= (Date.now() - renewTokenDate) / 1000;

  await delay(1000);
  console.log('token >', token);

  for (const row of data) {
    if (tokenIsInvalid && token) {
      console.log(`token expired > ${token}`, tokenIsInvalid);
      renewTokenDate = Date.now();
      [token, expires_in] = makeToken(40);

      await delay(1000);
      console.log('got new token', token);
    }

    console.info('token is valid >', !(tokenIsInvalid && token));
    console.log('row value >', row);

    await delay(1000);
    console.log('DATA FETCHED for >', row);
  }

  const processEndDate = Date.now();
  console.log('DONE in ', (processEndDate - processStartDate) / 1000, 's');
})();

Portanto, dentro do loop For antes de chamar a delayfunção, verificamos a validade do token comparando seu valor de expiração com a substrução do momento atual retornado por Date.now()e a última vez que obtivemos um token válido.

Se o token ainda for válido, iremos ignorar a condição if e continuar nosso processo, senão iremos gerar um novo token válido para evitar qualquer tipo de erro de autorização.

Espero que isto ajude :)