Служба недоступна — вызов API VueJS объекта нулевого размера для серверной части узла

#javascript #node.js #vue.js #http #axios

Вопрос:

У меня есть Node.js серверная часть и клиент переднего плана VueJS. От клиента я делаю запрос на серверную часть, которая, в свою очередь, вызывает API к другой сторонней конечной точке. Теперь есть задержка в получении ответа от сторонней конечной точки, и в интерфейсном приложении я получаю Service Unavailable - Zero size object - The server is temporarily unable to service your request. Please try again later. сообщение об ошибке со статусом 503 как. Я получаю это сообщение после нескольких ~35 секунд ожидания. Это вызов Axios, и время ожидания не указано. Вызов стороннего API занимает более одной минуты, и когда я проверяю внутренние журналы, это успешный вызов. Но поскольку интерфейс получает эту ошибку, он не будет показывать сообщение об успешном выполнении, и это заставляет пользователя снова отправлять форму, что приводит к созданию повторяющихся учетных записей снова и снова. Сторонний API выполняет проверку дубликатов и допускает 5 записей, но в большинстве случаев мне нужна только одна учетная запись на пользователя.

Кроме того, у меня есть резюме в моей форме, и из-за задержки срок действия резюме истекает, и оно показывает ошибку. Теперь пользователь считает, что срок действия капчи истек, и будет проверять ее снова.

Исходный код для вызова:

 const config = {}
    config.method = method.toLowerCase()
    config.url = url
    config.data = data
    config.params = params

    console.log('Config: ', config)

    axios(config).then(response => {
      console.log('~~~~~~~~~response: ', response)
      resolve(response)
    }).catch(error => {
      console.log('~~~~~~~~~~~error: ', error.response)
      reject(error.response.data)
    })
 

и вызов NodeJS-это

     const options = {
          method: 'POST',
          url: config.endpoint,
          headers:
            {
              'Content-Type': 'application/json;charset=utf-8',
              'Accept': 'application/json',
              authorization: 'Bearer '   token,
              'X-Jwt-KeyId': config.jwt
            },
          data: data,
          json: true
        };

 axios(options)
          .then(response => convertObjectKeysToLowercasePromise(response.data))
          .then(response => {
            logger.info({
              message: `Successfully fetched  response`, meta: `${JSON.stringify(response)}`
             
            });
            resolve(response)
          })
          .catch(function (error) {
              logger.error({
                message: `Error occured: ${error}`
                
              });
            }
 

Как я могу это решить ?

Приложение размещено в Kubenetes и docker, и файл docker содержит следующие команды для запуска приложения в бэкэнде

 FROM node:8.9.4
RUN npm install pm2 -g
EXPOSE 8000
USER node
CMD ["pm2-docker", "bin/www.js"]