Поскольку приложение использует другие сервисы, такие как 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'.
⬆️ К оглавлению раздела.
↩️ К оглавлению документации.
Представляет из себя URL путь доступа в базу данных, необходима для подключения к базе данных и работы MongoStore. Сперва находим официальный сайт MongoDB в поисковике:
Нажимаем на кнопку "Sign in":
Регистрируемся с помощью аккаунта в Google:
Выбираем аккаунт Google через который будем регистрироваться:
Подтверждаем правила использования сервиса:
Выбираем бесплатный тариф, его достаточно для успешного тестирования приложения:
Выбираем желанный сервис AWS и ближайший сервер к Вашему месторасположению, проверяем что кластер действительно "Free" и создаём кластер нажимая на кнопку "Create cluster":
Ожидаем подготовку кластера, после чего переходим по вкладке "Database Access" чтобы добавить нового пользователя для управления базой данных:
Добавляем нового пользователя:
Проверяем метод аутентификации по паролю и заполняем поля логина и пароля и добавляем нового пользователя:
Переходим во влкдаку "Network Access" чтобы добавить IP адресс, с которого будет возможность войти в базу данных:
Добавляем новый IP адресс:
Выбирая вкладку "add current in address" Вы привязываете текущий IP адресс, если выберите вкладку "allow access from anywhere", то зайти в базу данных можно будет с любого IP адресс:
Ожидаем пока статус "pending" поменяется на статус "active" и переходим в базу данных:
Выбираем вкладку подключения "Connect":
Выбираем вкладку подключения к нашему приложению "Connect your application":
Коппируем URL путь доступа доступа в базу данных:
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.
⬆️ К оглавлению раздела.
↩️ К оглавлению документации.
Необходим для создания сессий. Может быть любым, который Вы захотите.
⬆️ К оглавлению раздела.
↩️ К оглавлению документации.
Необходим для подключения аккаунта sendGrid для отправки писем пользователю при регистрации или смены пароля. Для привязки приложения к аккаунту sendGrid необходим уникальный ключ к API sendGrid. Чтобы получить ключ, сперва необходимо найти официальный сайт sendGrid в поисковике:
Нажимаем на кнопку регистрации "start for free":
Заполняем поля почты "Email address" и пароля "Password", потверждаем, что Вы не робот и подтверждаем условия приватности сервиса:
Заполняем индивидуальные данные аккаунта (эти данные могут быть и не существующими) sendGrid:
Открываем меню настроек "Settings":
Выбираем вкладку API ключей "API Keys":
Cоздаём новый API ключ:
Выбираем название для ключа и поле "Full Access":
Коппируем API ключ:
Добавляем значение в файл config.js:
⬆️ К оглавлению раздела.
↩️ К оглавлению документации.
Ключ-значения строки отправителя почты. Возвращаемся в Ваш персональный аккаунт sendGrid и выбираем создание индефикатора отправителя "Create a sender identity":
Или выбираем другую ссылку, но также на создание того же простого отправителя "Create a Single Sender":
Запонляем поля данных (достоверными данными должны быть только почты отправления, все остальные данные могут быть несуществующими) отправителя:
Добавляем значение в файл config.js:
⬆️ К оглавлению раздела.
↩️ К оглавлению документации.
Необходим для гиперссылок отправляемые пользователю на почту с помощью sendGrid, в режиме разработки состоит из номера локалхоста.
⬆️ К оглавлению раздела.
↩️ К оглавлению документации.
Необходим для создания ссылки на URL сформирован Heroku
при развёртывании приложения в сервисе Heroku
. В режиме разработки принимается номер локального хоста разработчика.