чернетка
Last updated
Last updated
завантаження файлів і тд (аналог lamp сервер типу воржпес чи phpmyadmin)
Створимо папку в корені проекта і назвемо її public або statics і створимо в ній index.html і можна створити структуру файлів
їх можна роздавати назовні для користувача, але потрібно вказати в проекті, що це статичні файди для цього в index там де мідлвари пишемо
Після цього запустивши сервер і пройшовши за посиланням ми відкриємо нашу статичного сторінку
далі розберемо як вантажити файли
для зберігання даних наприклад найпопулярніше рішення може бути
можна накрайняк помучавщись прикрутити і гуглдрайв
Але в цьому прикдалі будемо зберігати локально файли. Але на реальних проектах коли є заливка зі сторони юзера це погана ідея, бо на сервері щвидко закінчиться місце
завантажувати файди дозволяє мідлвалка Multer
менш популярний, але також вживаний пакет (простіший синтаксис, але менш популярний і ведикий розмір має)
встановимо малтер
бібліотека шарп, яка утискає картинки перед завантаженням
аналог jimp
ПОЧАТОК
Будемо вантажити аватарку юзера. введемо такий фугкіонал при апдейті юзера. дя цьог потрібно поміняти роути
відповідно роут, мідлварка і контролер
Пропишемо спочатку middleware і сконфігуруємо storage (там де буде зберігатися файл). (прим є 2 варіанти - диск-сторедж і меморісторедж):
Розберемо код: Спочатку конфігурується сторедж - multerStorage. У destination налаштовуємо куди буде зберігатися файл. Передається реквест, сам файл і також колбек функція (як її назвати неважливо, головне, щоб порядок зберігся) як параметри першим іде ерорка. в даному разі ми її прирівнюємо null statics/img - показує куди буде заливатися файл.
У filename схожа функція, тілльки тут extension - отримуємо розширення переданого файлу. Тут mimetype приходить у форматі image/jpg, де перший параметр - це тип файлу, а другий - його розширення. розбивши оядок на масив по роздільнику / і взявши елемент з індексом 1 ми отримаємо розширення jpg.
Колбек-функція формує назву файлу першим ерорку робимо null. а назву файлу робимо у вигляді шаблонного рядка айдіюзера-рендомчисло.розширення.
Далі налаштовуємо фільтр малтера. Якщо у нас формат файду імідж, то пропускаємо далі, якщо ні то повертаємо помилку.
після цього наращтовуємо весь мідлвар. Вказуємо сторедж, фільтр, обмедення (модна розмір числом передати а модна перемноженням). avatar - поле, яке ми передаємо при запиті з фронта, коли передаємо файл
Пропишемо контролер: У ньому оновимо поля які прийшли і подивимося в консолі що це за файл який приходить з реквесту
відправимо patch (а в налаштуваннях виставляємо body - form data)
перевіримо змінимо спочатку ім'я і перевіримо, що змінилося у базі даних.
А коли хочемо передати файл то треба вибрати "файл" І вказати шлях до файлу як ніби це робимо на фронт енд
якщо скаже, що немає папки img, то треба її створити в проекті у папці статікс і відправити файл переконатися, що вона фізично заливається у папку.
А також глянути в консолі що приходить з реквеста у файл
Поки що просто завантажується файл, але не записується ніде в базу даних.
створимо автоматичне генерування аватарки для юзера
Для цього потрібно підправити модель юзера
Підключимо модуль крипто, який уже є в ноді
створимо в схемі окреме поле під аватар
І пропишемо вбудовану мідлварку моделі перед тим як робити основні мідлвари чи контроллери
із нового ми прописали там оце
розберемо цей код:
якшо користувач створюється новий, то створимо хеш по імейлу і пропишемо у значення avatar посилання на зшенерований аватар. також у лінку можна вказати стиль створеного аватаара.
після цього через програму postman спробуємо зареєструвати юзера і перевірити чи згенерується йому аватарка
це буде пост запит створення юзера із переданим обїєктом необхідних полів. Наприклад таке
і побачимо що згенеруєтсья аватар і пропишеться у поле нашого створеного користувача
РЕФАКТОРИНГ
для початку встановимо модуль fs-extrа. Це додатковий модуль який розширює функціонал стандартного вбудованого fs
В сервісес стовримо файл imageService.js і в нього винесемо сервіси повʼязані із записом картинок
Це буде у вигляді класу
Пояснення:
Той самий функціонал оптимізації картинок можна зробити замість sharp за допомогою jimp
ТЕПЕР ПРОПИШЕМО ЯК ЗБЕРІШАТИ ЛІНК НА АВАТАР ЗАВАНТАЖЕНОГО ФОТО
відрефакторимо наш код
поправимо наш мідрвар із врахуванням уже написаного сервісу
Перепишемо вище написаний код.
підключимо нащ сервіс
другий метод класу ми вже використаємо в контролері
замість оцього коду
напишемо:
спочатку імпортуємо
а потім
ТУТ:
Тепер зробимо запит на апдейт юзера
patch
передамо name - sasha
avatar - file і оберемо наш файл аватара.
перевіримо чи зʼявився наш файл в папці і чи оновилася база даних
(при цьому старий файл в папці не видаляється. можна зробити перевірку по базі даних і видаляти старий файл)
-------------------------------
Додатково про крипто
Напишемо роут оновлення пароля уже залогіненого користувача
Краще для оновлення пароля робити окрему гілку запиту
вмідлварці пишемо
в сервісах обробляємо пароль
і сам контролер