Упражнение — пакетная загрузка сообщений электронной почты пользователя
В этом упражнении вы расширите приложение, чтобы загружать письма пользователя блоками по 10 штук.
Загрузка писем блоками по 10 штук
Начните с обновления функции getEmails()
, чтобы загружать письма блоками по 10 штук. Определив следующий набор писем для загрузки, передайте его в качестве аргумента функции.
В редакторе кода откройте файл graph.js.
Обновите подпись функции
getEmails()
, чтобы принять один аргументnextLink
:async function getEmails(nextLink) { // ... }
Если аргумент
nextLink
задан, функция передаст его в пакет SDK для получения данных. Если аргументnextLink
не задан, функция загрузит начальный набор данных. Обновите функциюgetEmails()
заменив операторreturn
следующим операторомif
:if (nextLink) { return await graphClient .api(nextLink) .get(); } else { return await graphClient .api('/me/messages') .select('subject,receivedDateTime') .orderby('receivedDateTime desc') .top(10) .get(); }
Обновленная функция
getEmails()
должна выглядеть следующим образом:async function getEmails(nextLink) { ensureScope('mail.read'); if (nextLink) { return await graphClient .api(nextLink) .get(); } else { return await graphClient .api('/me/messages') .select('subject,receivedDateTime') .orderby('receivedDateTime desc') .top(10) .get(); } }
Расширьте шаблон, чтобы пользователи могли загружать больше писем
Вы расширили функцию getEmails()
, чтобы загружать больше писем. Следующий шаг — отобразить кнопку, с помощью которой пользователи смогут загружать больше писем (если доступны).
В редакторе кода откройте файл index.html.
Найдите строку
<ul id="emails"></ul>
и добавьте следующий код сразу после него, чтобы добавить кнопку, которая позволяет пользователям загружать больше сообщений электронной почты.<div id="loadMoreContainer" style="display: none;"> <button onclick="displayEmail();">Load more</button> </div>
Загрузка большего числа писем
Обновив приложение, чтобы пользователи могли загружать больше писем, выполните последний шаг — добавьте функциональность для обработки такой загрузки.
В редакторе кода откройте файл ui.js.
Перед выполнением функции
displayEmail()
определите новую переменную с именемnextLink
, не назначая ей значение:var nextLink;
Во время выполнения функции
displayEmail()
обновите вызов, чтобы получить функциюgetEmails()
с аргументомnextLink
.var emails = await getEmails(nextLink);
После получения данных получите значение свойства
@odata.nextLink
. Если оно задано, оно будет указывать на наличие дополнительных данных, доступных пользователям для отображения. Добавьте следующий код сразу после оператораif
в функцииdisplayEmail()
:nextLink = emails['@odata.nextLink'];
В конце выполнения функции
displayEmail()
, после отображения полученных писем, прокрутите страницу до конца, чтобы пользователь сразу же их увидел.window.scrollTo({ top: emailsUl.scrollHeight, behavior: 'smooth' });
Наконец, проверьте, возвращен ли аргумент
nextLink
. Если да, отобразите кнопку для загрузки большего числа писем.Добавьте следующий код в конец функции
displayEmail()
:if (nextLink) { document.getElementById('loadMoreContainer').style = 'display: block'; }
В итоге функция
displayEmail()
должна выглядеть следующим образом:var nextLink; async function displayEmail() { var emails = await getEmails(nextLink); if (!emails || emails.value.length < 1) { return; } nextLink = emails['@odata.nextLink']; document.getElementById('displayEmail').style = 'display: none'; var emailsUl = document.getElementById('emails'); emails.value.forEach(email => { var emailLi = document.createElement('li'); emailLi.innerText = `${email.subject} (${new Date(email.receivedDateTime).toLocaleString()})`; emailsUl.appendChild(emailLi); }); window.scrollTo({ top: emailsUl.scrollHeight, behavior: 'smooth' }); if (nextLink) { document.getElementById('loadMoreContainer').style = 'display: block'; } }
Запуск приложения
Вы расширили приложение, чтобы отображать письма пользователя с помощью Microsoft Graph блоками по 10 штук и дать пользователю возможность загружать больше писем. Запустим приложение локально.
Предварительно просмотрите веб-приложение, выполнив следующую команду в терминале.
npm start
Браузер должен указывать на
http://localhost:8080
.Нажмите кнопку Войти с помощью учетной записи Майкрософт, чтобы войти с помощью учетной записи Microsoft 365.
Выполнив вход с помощью учетной записи, нажмите кнопку Показать почту.
После этого список последних 10 писем пользователя должен отобразиться в приложении.
Если в вашем почтовом ящике больше 10 писем, вы увидите кнопку, позволяющую загрузить следующие 10 сообщений.
Остановите сервер Node.js, нажав клавиши CTRL+C в окне терминала.