Skip to content

Latest commit

 

History

History
300 lines (190 loc) · 16.1 KB

File metadata and controls

300 lines (190 loc) · 16.1 KB

Вводные данные

Поскольку приложение использует другие сервисы, такие как MongoDB или sendGrid, то нам необходимы уникальные вводные данные для подключения этих сервисов к приложению.

Оглавление раздела

Режим разработки


Режим разработки

Полный перечень данных данного приложения:

  • MONGODB_URL - URL-ссылка подключение доступа пользователя MongoDB с определенными правами.
  • SESSION_SECRET - секретный ключ сессии.
  • SENDGRID_API_KEY - ключ доступа в Ваш аккаунт sendGrid.
  • EMAIL_FROM - название email, который используется для рассылки сообщений пользователям приложения.
  • BASE_URL - URL-ссылка на домен приложения.

А в коде они выглядят так:

module.exports = {
    MONGODB_URL: `mongodb+srv://<username>:<password>@<database name>.<strict name>.<collection>`,
    SESSION_SECRET: '<personal secret value>',
    SENDGRID_API_KEY: '<sendgrid api key>',
    EMAIL_FROM: '<email>',
    BASE_URL: '<url>'
  }

По скольку разработка происходит локально, то и данные хранятся в отдельном файле в формате: ключ-значение, поэтому вводные данные берутся из отдельного файла по ссылке-ключу на значение определенного значения.

⬆️ К оглавлению раздела.
↩️ К оглавлению документации.


Режим готового приложения

При развёртывании приложений в PaaS сервисах, таких как Heroku, вводные данные могут отличаться, поскольку в режиме разработки BASE_URL является локальный localhost Вашего компьютера, а при разворачивании этого же приложения, но в сервисе Heroku, BASE_URL уже будет внутренним url-адресом Heroku.

Для этого, в Heroku и подобных ему сервисах есть интерфейса ввода уникальных данных, где в одно поле вводят ключ, а в другое значение. В самом же приложении входные данные должны быть изменены не на ключ-значение, а на ключ-ссылку.

⬆️ К оглавлению раздела.
↩️ К оглавлению документации.


Переключатель режимов

Чтобы иметь возможность запускать приложение в разных режимах, необходима функция обработчик, запускающая тот или иной режим по условию. В приложении за это отвечает файл keys.js. Код файла keys.js:

if (process.env.NODE_ENV === 'production') {
  module.exports = require('./keys.prod')
} else {
  module.exports = require('./keys.dev')
}

Где:

  • process.env.NODE_ENV === 'production' - режим готового приложения.
  • module.exports = require() - подключение ключей-ссылок из файла './keys.prod'.
    Код файла './keys.prod':
module.exports = {
    MONGODB_URL: process.env.MONGODB_URL,
    SESSION_SECRET: process.env.SESSION_SECRET,
    SENDGRID_API_KEY: process.env.SENDGRID_API_KEY,
    EMAIL_FROM: process.env.EMAIL_FROM,
    BASE_URL: process.env.BASE_URL
  }

Где:

  • MONGODB_URL - ключ на ссылку process.env.MONGODB_URL.
    • process - глобальный объект серверной платформы Node.js.
    • env - объект содержащий среду разработки.
    • MONGODB_URL - ссылка-значение на URL-ссылку подключения доступа в MongoDB с правами.
  • module.exports = require() - подключение ключей-значений из файла './keys.dev'.

⬆️ К оглавлению раздела.
↩️ К оглавлению документации.


MONGODB_URL

Представляет из себя URL путь доступа в базу данных, необходима для подключения к базе данных и работы MongoStore. Сперва находим официальный сайт MongoDB в поисковике:

1.png

Нажимаем на кнопку "Sign in":

2.png

Регистрируемся с помощью аккаунта в Google:

3.png

Выбираем аккаунт Google через который будем регистрироваться:

4.png

Подтверждаем правила использования сервиса:

5.png

Выбираем бесплатный тариф, его достаточно для успешного тестирования приложения:

6.png

Выбираем желанный сервис AWS и ближайший сервер к Вашему месторасположению, проверяем что кластер действительно "Free" и создаём кластер нажимая на кнопку "Create cluster":

7.png

Ожидаем подготовку кластера, после чего переходим по вкладке "Database Access" чтобы добавить нового пользователя для управления базой данных:

8.png

Добавляем нового пользователя:

9.png

Проверяем метод аутентификации по паролю и заполняем поля логина и пароля и добавляем нового пользователя:

10.png

Переходим во влкдаку "Network Access" чтобы добавить IP адресс, с которого будет возможность войти в базу данных:

11.png

Добавляем новый IP адресс:

12.png

Выбирая вкладку "add current in address" Вы привязываете текущий IP адресс, если выберите вкладку "allow access from anywhere", то зайти в базу данных можно будет с любого IP адресс:

13.png

Ожидаем пока статус "pending" поменяется на статус "active" и переходим в базу данных:

14.png

Выбираем вкладку подключения "Connect":

15.png

Выбираем вкладку подключения к нашему приложению "Connect your application":

16.png

Коппируем URL путь доступа доступа в базу данных:

17.png

1.Подключение MongoDB:

Подключение MongoDB в главный файл index.js:

const mongoose = require('mongoose')

await mongoose.connect(keys.MONGODB_URL, {
    useNewUrlParser: true,
    useFindAndModify: false
})

Где:

  • mongoose.connect({}) - метод connect библиотеки mongoose принимающая 2 аргумента: URL путь доступа к базе данных и объект с рядом свойств.
  • keys.MONGODB_URL - URL путь доступа к базе данных.
  • useNewUrlParser - свойство анализатора строк, который необходимо включить true.
  • useFindAndModify - свойство управляющее подключением новых методом взамен старых, true по умолчанию.

2.Подключение MongoStore:

Логика подключения MongoStore в главном файле index.js:

const session = require('express-session')
const MongoStore = require('connect-mongodb-session')(session)

const store = new MongoStore({
  collection: 'sessions',
  uri: keys.MONGODB_URL
})

Где:

  • store - экземпляр хранилища MongoDB new MongoStore({}) принимающий объект c перечнем свойств.
  • collection - ключ принимайющий значение название коллекции 'sessions' в базе данных MongoDB.
  • uri - ключ принимайющий значение URL пути доступа к базе данных keys.MONGODB_URL.

⬆️ К оглавлению раздела.
↩️ К оглавлению документации.


SESSION_SECRET

Необходим для создания сессий. Может быть любым, который Вы захотите.

⬆️ К оглавлению раздела.
↩️ К оглавлению документации.


SENDGRID_API_KEY

Необходим для подключения аккаунта sendGrid для отправки писем пользователю при регистрации или смены пароля. Для привязки приложения к аккаунту sendGrid необходим уникальный ключ к API sendGrid. Чтобы получить ключ, сперва необходимо найти официальный сайт sendGrid в поисковике:

1.png

Нажимаем на кнопку регистрации "start for free":

2.png

Заполняем поля почты "Email address" и пароля "Password", потверждаем, что Вы не робот и подтверждаем условия приватности сервиса:

3.png

Заполняем индивидуальные данные аккаунта (эти данные могут быть и не существующими) sendGrid:

4.png

Открываем меню настроек "Settings":

5.png

Выбираем вкладку API ключей "API Keys":

6.png

Cоздаём новый API ключ:

7.png

Выбираем название для ключа и поле "Full Access":

8.png

Коппируем API ключ:

9.png

Добавляем значение в файл config.js:

10.png

⬆️ К оглавлению раздела.
↩️ К оглавлению документации.


EMAIL_FROM

Ключ-значения строки отправителя почты. Возвращаемся в Ваш персональный аккаунт sendGrid и выбираем создание индефикатора отправителя "Create a sender identity":

10.png

Или выбираем другую ссылку, но также на создание того же простого отправителя "Create a Single Sender":

11.png

Запонляем поля данных (достоверными данными должны быть только почты отправления, все остальные данные могут быть несуществующими) отправителя:

12.png

Добавляем значение в файл config.js:

13-1.png

⬆️ К оглавлению раздела.
↩️ К оглавлению документации.


BASE_URL

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

⬆️ К оглавлению раздела.
↩️ К оглавлению документации.


process.env.PORT (Режим готового приложения)

Необходим для создания ссылки на URL сформирован Heroku при развёртывании приложения в сервисе Heroku. В режиме разработки принимается номер локального хоста разработчика.