Это 4-я часть серии, в которой мы сами создаем потрясающее приложение.

В этой части вы:

  1. Откройте новую учетную запись в Mongo DB
  2. Создайте новую базу данных и коллекцию для хранения сообщений в ней.
  3. Установите пакет npm Mongo DB
  4. Хранить учетные данные в переменных конфигурации на сервере (избегая жестко заданных учетных данных)
  5. Получите сообщение «следующее» из базы данных Mongo и отправьте его с помощью нашего приложения.
  6. После успешной отправки отметьте сообщение как отправленное в базе данных Mongo и установите сообщение «следующее».

Настройка учетной записи MongoDB и добавление к ней сообщений

(4 шага)

  1. Настройте учетную запись MongoDB с Javascript в качестве предпочтительного языка, начав здесь

2. Теперь давайте создадим «коллекцию» для данных наших сообщений. Коллекция похожа на папку, которая содержит «документы», похожие на файлы в папке. Каждый «документ» будет содержать информацию об одном сообщении.

3. Теперь мы добавим данные нашего первого сообщения. Данные сообщения должны содержать следующую информацию:

  • setup — здесь будет содержаться текст для настройки шутки (включая специальные символы, которые мы использовали для стилизации нашего сообщения — звездочки в начале и в конце текста)
  • панч — здесь будет содержаться текст для кульминации
  • image — здесь будет храниться адрес ссылки на изображение шутки в корзине S3.
  • nextup — это логический (true/false) индикатор того, является ли сообщение следующим для отправки.

(Используйте клавишу возврата, чтобы создать новую строку)

4. Теперь давайте воспользуемся опцией клонирования документа, чтобы скопировать структуру, и для каждой новой копии мы будем обновлять ее соответствующим содержимым. Причина создания клона состоит в том, чтобы поддерживать точно такую ​​же структуру документа для правильной работы нашего кода. Повторяйте процесс, пока не добавите все свои шутки в MongoDB.

Получение нашего кода для извлечения следующего сообщения из учетной записи MongoDB

(15 шагов)

  1. Установите пакет MongoDB npm в наш проект, чтобы мы могли легко использовать функции, связанные с MongoDB, в нашем коде. Напишите следующий текст в Терминале VSCode и нажмите клавишу возврата:
npm install mongodb

2. Теперь давайте включим эту функциональность в наш код, добавив следующую строку в начало нашего кода и сохранив файл:

//Requere the mongodb package
const { MongoClient } = require('mongodb');

3. Давайте создадим пользователя в MongoDB, чтобы получить учетные данные для подключения к нашей базе данных из нашего приложения (для простоты избегайте использования специальных символов для настройки имени пользователя и пароля)

4. Теперь давайте скопируем эти учетные данные

5. Добавьте в код следующие строки и вставьте скопированные учетные данные сразу после них. Мы будем использовать mongouri в качестве учетных данных в нашем коде для подключения к MongoDB (вместо того, чтобы каждый раз вставлять фактические учетные данные). Также мы настроили параметр шутки

const mongouri = //PASTE HERE THE CREDENTIALS CODE YOU"VE COPIED//
let joke;// the joke parameter will hold our message data

6. Замените часть «пароль» паролем пользователя, которого вы недавно создали для доступа к базе данных.

7. Скопируйте имя базы данных из MongoDB и вставьте его вместо части «myFirstDatabase».

8. Добавьте учетные данные в двойные кавычки. содержимое в кавычках рассматривается как текст, а не как переменная

9. Создайте фактическое подключение к базе данных, используя учетные данные, добавив следующий код.

// Create a new MongoClient
  let mongoClient = new MongoClient(mongouri, {
    useUnifiedTopology: true 
    })
    try {
        // Connect the client to the server
        await mongoClient.connect();
        let db = mongoClient.db('slackapp')//set the reference to the connected slackapp database as db
        
        //get the joke data
        let messagesCollection = db.collection('messages')// set the reference to the messages collection as messagesCollection
        joke=await messagesCollection.findOne({ nextup: true }) // this line will find one document in the messages collection that has the nextup value set to true, and store this document and its content as parameter named joke
 
        
    } catch (errormongo) {
        console.error(errormongo);
        }

Этот код в основном подключается к базе данных, используя настроенные нами учетные данные, и извлекает документ, у которого для параметра nextup установлено значение true, из коллекции сообщений. Документ хранится в параметре шутки, и мы можем использовать его содержимое для заполнения содержимого отправляемого сообщения. Вместо отправки жестко запрограммированного сообщения.

10. Используя содержимое параметра шутки, мы заполним данные сообщения, которое мы хотели бы отправить. Помните, что в нашем документе есть ключи с именами setup, punch и image. Чтобы получить их содержимое из параметра шутки, мы можем использовать следующий синтаксис: шутка.setup даст установочное содержимое полученного документа, шутка.панч получит содержимое шутки, а шутка.изображение вернет ссылку. по ссылке на изображение.

Замените содержимое сообщения следующим:

11. Давайте проверим это, установив время через 5 минут в часовом поясе UTC, сохранив файл, зафиксировав его и отправив в рабочую среду. Затем проверьте наш слабину, чтобы увидеть, получили ли мы сообщение, когда придет время.

12. Проверьте свой Slack. Вы получили новое сообщение от приложения? Ты сделал? Большой! Вы успешно подключили MongoDB к своему приложению и извлекли содержимое сообщения из базы данных вместо того, чтобы жестко запрограммировать его в приложении.

13. И последнее в этой части. Наши учетные данные MongoDB жестко запрограммированы в коде приложения. Мы будем хранить их на сервере (Heroku) из соображений безопасности. Перейдите в Heroku и добавьте учетные данные MongoDB (без кавычек) в качестве значения параметра mongouri.

14. Вместо жестко заданных учетных данных мы должны получить значение с нашего сервера. Эти переменные конфигурации хранятся как переменная среды, доступная на сервере. Чтобы получить доступ к его значению из кода, мы можем использовать синтаксис process.env.mongouri, который в основном обращается к объекту процесса и получает переменную mongouri из параметров env (среды).

15. Протестируем еще раз (скорректируйте время задания на 5 минут вперед по UTC, сохраните, зафиксируйте, отправьте). Получили сообщение в Slack? Ура!

Обновите коллекцию шуток, чтобы указать новое следующее сообщение, которое будет использоваться для следующего сообщения.

Мы добавим новое поле в наши документы, чтобы указать сообщения, которые уже были отправлены, и пометить следующее сообщение для отправки.

Пойдем!

Добавляем поле «отправлено» логического типа (true/false) во все наши документы в коллекции

(7 шагов)

  1. Давайте настроим наш терминал в VSCode для программного доступа и изменения наших документов MongoDB. Перейдите сюда, чтобы найти инструкции:

2. Я выберу версию для Mac. Напишите следующую команду в Терминале и нажмите клавишу возврата

brew install mongosh

Это может занять несколько минут.

3. Как только вы увидите эту строку, это означает, что процесс завершен.

Вы можете заметить несколько ошибок, которые были выброшены в процессе — они могут появляться по многим причинам. Давайте все равно попробуем запустить нашу команду, если ошибки не связаны с нашей целью.

4. Теперь добавьте команду подключения, скопированную из инструкции, и нажмите клавишу возврата.

5. Добавьте свой пароль для добавленного пользователя в MongoDB и нажмите Enter.

6. Теперь, когда мы подключены к нашей базе данных в MongoDB, мы можем добавить поле «отправлено» ко всем нашим документам в коллекции сообщений, используя следующий код:

db.messages.updateMany({},{ $set: {"sent": false} })

Примечание. messages в приведенном выше коде — это название коллекции, в которой хранятся ваши документы, содержащие шутки.

Подробнее об этом коде можно прочитать в официальной документации здесь.

В основном этот код переводится как:

  • Перейдите к коллекции «messages» в базе данных и обновите (db.messages.updateMany)
  • все документы (фигурные скобки {} без значения внутри них указывают, что мы не хотим ничего фильтровать из коллекции сообщений)
  • с дополнительным параметром «sent», для которого установлено значение false ({ $set: {«sent»: false} })

При нажатии Enter вы должны увидеть аналогичный результат в терминале

7. Проверьте коллекцию в MongoDB, чтобы увидеть обновленные документы 🎉

После отправки сообщения в slack обновите поле «отправлено» отправленного документа на «true» и отметьте другой документ как «следующий».

(5 шагов)

  1. Поскольку мы собираемся обновить несколько вещей в нашей коллекции, давайте установим переменные для ссылок на базу данных и коллекции как глобальные переменные, поместив их в верхнюю часть нашего кода, прежде чем наши функции будут выполнены. Для этого нам нужно добавить эти 2 строки (переменные, установленные вне функции, доступны для всех функций. Переменные, установленные внутри функции, доступны только для этой функции и недоступны из других функций)

а затем удалить «let» из переменных здесь («let» — это команда для создания новой переменной, поскольку мы установили ее в начале нашего кода, мы не хотели бы создавать новую локально )

2. Пометить текущий отправленный документ как отправленный и снять с него флаг nextup. Вставьте следующие строки в код VSCode сразу после последнего оператора «catch»:

try {
    let updatesent = await messagesCollection.updateOne({ nextup: true }, { $set: { nextup: false, sent: true } }) ; //Find one document that has the nextup value set to true and change its nextup value to false, and sent value to true
   }
   catch (errormongo){
    console.error(errormongo);//in case an of an error with the execution, printout the error in the server log
   }

Что переводится как:

  • Попробуйте обновить один документ из коллекции сообщений, дождитесь окончания действия. Пусть updatesent будет переменной, содержащей результаты действия.
  • При поиске документа для обновления ищите тот, у которого в поле nextup установлено значение true.
  • При обнаружении установите для поля nextup значение false, а для поля sent — значение true.
  • В случае ошибки распечатать ее в логе сервера

3. Теперь давайте найдем документ, который не помечен как следующий, ни как отправленный(следующий: ложь, отправлено: ложь), и установим это будет следующим (следующий: правда). Вставьте этот код сразу после предыдущего:

try {
    let updatenextup = await messagesCollection.updateOne({ nextup: false, sent: false }, { $set: { nextup: true } }) ; //Find one document that has the nextup value set to false, while the sent value is set to false, and change its nextup value to true
   }
   catch (errormongo2){
    console.error(errormongo2);//in case an of an error with the execution, printout the error in the server log
   }

4. Измените время задания кукурузы на несколько минут и сохраните.

5. Затем добавьте, зафиксируйте и отправьте на сервер. когда задание завершится, вы сможете увидеть обновленные поля в MongoDB.

Подводя итог тому, чего мы достигли в этой части

  • Настраиваем учетную запись MongoDB
  • Переключена отправка сообщений на использование информации из базы данных вместо жестко заданных сообщений.
  • Использовал команды терминала и оболочки для доступа к базе данных и выполнения пакетных действий с данными нашей базы данных.
  • Динамически извлекаемая и обновляемая база данных из нашего приложения

В следующей части вы:

  1. Создайте новое серверное приложение на Heroku, которое будет служить веб-сайтом.
  2. Настройте серверное приложение для ответа на сообщения GET.
  3. Создайте простую HTML-страницу с кнопкой «Добавить в Slack».
  4. Создан процесс аутентификации Oauth2: получите из Slack временный код авторизации и обменяйте его на токен доступа

Перейдем к части 5››