У меня есть функция в Node, которая должна выбрать всех пользователей из Azure AD (я использую Microsoft Graph и Ax ios).
Эта функция запрашивает Microsoft Graph, ответ включает в себя массив пользователей. Максимальное количество объектов в этом массиве ограничено 999
. Если есть больше пользователей, этот ответ также будет включать @odata.nextLink
. Я планировал запросить запрос, и, если в ответе есть @odata.nextLink
, повторяйте запрос до тех пор, пока не будет @odata.nextLink
. Не совсем уверен, есть ли другой способ сделать это лучше.
async function fetchUsers(tokenEndpoint, client_id, client_secret, query) {
try {
let allUsers = [];
let bearer = `Bearer ${await fetchToken(
tokenEndpoint,
client_id,
client_secret
)}`;
let res = await fetchData(bearer, `${msAPI}${query}`);
if (res.status === 200) {
allUsers.push(...res.data.value);
console.log(allUsers.length);
let nextURL = res.data["@odata.nextLink"];
while (nextURL != undefined) {
bearer = `Bearer ${await fetchToken(
tokenEndpoint,
client_id,
client_secret
)}`;
res = await fetchData(bearer, nextURL);
allUsers.push(...res.data.value);
nextURL = res.data["@odata.nextLink"];
console.log(allUsers.length);
}
}
return allUsers;
} catch (err) {
handleError(err);
}
}
async function fetchToken(tokenEndpoint, client_id, client_secret) {
try {
const res = await axios.post(
tokenEndpoint,
qs.stringify({
client_id,
client_secret,
grant_type: "client_credentials",
scope
})
);
return res.data.access_token;
} catch (err) {
handleError(err);
}
}
async function fetchData(bearer, url) {
try {
const res = await axios.get(url, {
headers: {
Authorization: bearer
}
});
return res;
} catch (err) {
handleError(err);
}
}
I have this statement in another async function
const allUsers = await fetchUsers(tokenEndpoint,clientId,clientSecret,query);
Иногда это работает отлично, и я получаю всех моих Azure пользователей AD, а иногда я получаю ошибку ECONNRESET
в середине функция выполняется, и она не будет завершена sh. Эта ошибка, по-видимому, возникала несколько раз в одной сети, затем я проверил в другой сети и не получил ошибку ни разу. Вернулся к исходной сети и снова получил ошибки. Не уверен, что это проблема сети или то, как я выполняю запросы Ax ios в моем l oop.
Независимо от того, как мне go решить эту проблему ECONNRESET
?