Пример использования валидирующих EAI и IDN библиотек в коде Javascript

Материал из вики.поддерживаю.рф
Перейти к навигации Перейти к поиску

Пример проекта для бэкенда на Javascript

Примеры кода на Java доступны по ссылке.

Примеры кода на Javascript для универсального принятия

В этой папке вы найдете примеры кода для исполнения правил универсального принятия (UA) для библиотек javascript.

Подготовка среды

Убедитесь, что у вас установлен NodeJS. Код разработан для версии NodeJS >= 17.5.

Бэкенд на Javascript для демо-сайта с поддержкой UA

Бэкенд использует веб-фреймворк Express.

Подготовка к работе

Установите зависимости с помощью команды npm:

/javascript $ npm install

Начните набирать код бэкенда: npm start

Создайте докерный образ

Чтобы создать докерный образ для бэкенда, выполните команду:

$ docker build . -t ua-backend-javascript

Запустите бэкенд и прослушайте порт 3000, он выполнит следующую команду:


$ docker run -d --name ua-javascript -p 3000:3000 ua-backend-javascript

Примеры кода для IDNA

idna-uts46 (idna_convert.js)

Внедряет протокол IDNA2008 (без BIDI и контекстуальных правил) для конвертирования домена из U-метки в A-метку и обратно. Опция transitional: false позволяет исключить обработку IDNA2003 и использовать только IDNA2008.

Примеры кода для EAI

Используются наиболее простые примеры SMTP без механизмов аутентификации. Вы можете использовать для тестирования SMTP-сервер Mailhog. Основная реализация не поддерживает расширение SMTPUTF8, но его поддерживает этот вариант.

validator.js (eai-validate.js)

validator.js обеспечивает метод isEmail для проверки действительности электронного адреса (в том числе интернационализированного).

nodemailer (eai-smtp.js)

nodemailer автоматически преобразует доменную часть адреса из U-метки в A-метку с помощью punnycode.js. Также происходит внутренняя проверка расширения SMTPUTF8, без открытого API. В примере кода, тем не менее, показано, как извлечь API, так как nodemailer не сообщает об ошибке, если smtp-сервер не поддерживает расширение, см. отчет о баге

Тестирование

Когда сервер запущен (а mock-сервер SMTP вроде mailhog слушает порт 1025), можно делать HTTP-запросы:

curl -X POST localhost:4567/ua/register -H 'Content-Type: application/json' -d '{"email":"test@test.com","username":"test", "libs": {"idna": {"convert": "idna"}, "eai": {"validate": "email-validator", "smtp": "smtplib"}}, "website": "http://test>.com"}'

Результат:

{
  "field": {
    "website": {
      "messages": [
        "[nodejs] parsing URL http://test>.com failed: Invalid URL"
      ],
      "error": true,
      "value": "http://test>.com"
    },
    "email": {
      "messages": [
        "[validator] Email address test@test.com is valid (no DNS verifications)",
        "[nodemailer] Email has been sent successfully. See it <a href="http://localhost:8025" target="_blank">here</a>!"
      ],
      "error": true,
      "value": "test@test.com"
    }
  }
}