#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"]