Если мы разрабатываем более серьезное приложение, мы, вероятно, будем использовать какой-то вид уведомления по электронной почте или информационный бюллетень, или даже просто письмо о смене пароля. В этой статье я представлю свой сервис шаблонов электронной почты / pdf.
Код: https://github.com/MaurerKrisztian/template-api-tm
Демонстрация: https://template-api-tm-production.up.railway.app/template
Цель заключалась в следующем:
- введя имя шаблона и данные заполнителей, я получаю заполненную html-страницу.
Размышляя об этом дальше, так как я использую его для электронной почты 90% времени, я поэтому встроил функцию отправки электронной почты.
Пример тела:
{
"mailOptions": {
"to": "test@gmail.com",
"subject": "test email"
},
"template": {
"name": "test_template",
"data": {
"title": "test title",
"description": "This is a test description",
"color": "#DEB887"
}
}
}
Для каждого запроса должны быть указаны: mailOption, template.name template.data
-
Работа над ошибками: В части данных легко ошибиться, поэтому каждый шаблон имеет валидатор.
-
Другая проблема заключалась в том, что если у нас несколько шаблонов, мы не можем запомнить, какие данные они ожидают, а копание в коде отнимает много времени. Поэтому я добавил конечную точку, где можно просмотреть самую важную информацию: доступные шаблоны, примеры данных и т.д.
https://template-api-tm-production.up.railway.app/template
-
Вы можете получить доступ к игровой площадке для тестирования шаблонов с различными данными, нажатием одной кнопки шаблон будет перерисован.
-
Письма могут работать только с inline css, однако писать весь шаблон с inline css не очень красиво и не удобно, поэтому css, указанный в теге style в шаблонах, автоматически преобразуется в inline при отправке.
-
Наконец, я также включил генерацию pdf, при запросе вы можете указать, что вы хотите: html или pdf.
Вот как выглядит процесс генерации:
- проверка данных
- заполнение шаблона полем с данными
- конвертация в pdf (если необходимо)
- преобразование css в шаблоне
- отправка письма
Не идеальный, но мой 🙂 Тоже моя первая статья. 🥳