В репозиторіях може бути застаріла версія
$ sudo apt install nodejs npm
$ node --version
$ npm --version
Нові версії і керування ними більш гнучко виконувати за допомогою nvm (Node Version Manager)
# встановлення nvm
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# перезавантаження профілю shell
$ source ~/.bashrc
# перегляд доступних версій
$ nvm list-remote
# встановлення останньої версії NodeJS
$ nvm install node
# встановлення конкретної версії
$ nvm install 22
# перемикання між версіями
$ nvm use 22
# встановлення версії за замовчуванням:
$ nvm alias default 22
Встановлюємо Directus і драйвер бази даних, з якою працюватимемо надалі
$ npm install directus sqlite3
# npm cache clean --force
# nmp audit fix --force
Під час інсталляції в інтерактивному режимі слід обрати базу даних, з якою працюватимемо надалі: SqLite3
$ mkdir ./my_projict
$ cd ./my_projict
$ npx directus init
Перший запуск адмін-панелі виконується з правами адміністратора, для цього необхідно створити прихований файл .env з первинними базовими налаштуваннями
# файл .env в директорії проєкту
DB_CLIENT="sqlite3"
DB_FILENAME="./data.db"
KEY="випадковий-довгий-рядок-1"
SECRET="випадковий-довгий-рядок-2"
ADMIN_EMAIL="admin@example.com"
ADMIN_PASSWORD="123"
$ npx directus start
Переходимо за вказаною адресою і вводимо ADMIN_EMAIL / ADMIN_PASSWORD адміністратора з .env
Підключення декількох баз даних до одного екземпляра Directus не підтримується
Якщо у нас є декілька файлів *.db – їх необхідно поєднати в один окремо.
Наступним кроком є: або заміна початкового файла data.db в директорії проекту на власний або в налаштуваннях .env слід вказати шлях до нього в параметрі DB_FILENAME (більш правильний спосіб).
Інтеграція нових таблиць виконується командою:
$ npx directus bootstrap
Зауваження! Якщо виникає помилка:
[FORBIDDEN] You don’t have permission to access this
Таблиця бази даних не має поля первинного ключа (Primary Key). Directus не може ідентифікувати записи в таблиці без унікального ID, тому він просто блокує доступ до неї на рівні API, щоб уникнути помилок при читанні або редагуванні даних.
Не налаштована політика прав доступу.
- в Settings → Access Control → роль Public додати відповідну таблицю (в нижче наведених прикладах - це PERSONS)
- надати права “All Access” на Read
Для форматованого виводу json використовується консольна утіліта jq
# отримати всі дані з таблиці PERSONS
curl -X GET "http://127.0.0.1:8055/items/PERSONS" | jq
# отримати запис лише з полів id та last_name з таблиці PERSONS
curl -X GET "http://127.0.0.1:8055/items/PERSONS?fields=id,last_name" | jq
# отримати запис з таблиці PERSONS для якого id="persons_name"
curl -X GET "http://127.0.0.1:8055/items/PERSONS/persons_name" | jq
# більш правильний спосіб:
curl -g -X GET 'http://127.0.0.1:8055/items/PERSONS?filter[id][_eq]=persons_name' | jq
# якщо не використовувати опцію **-g** (URL Globbing Off)
# то в консолі буде помилка: curl: (3) bad range in URL position...
# для її уникнення слід екранувати символи []$ та використовувати "" для http-url
# щоб curl сприймав дужки [] як звичайний текст і відправляв їх у такому вигляді на сервер,
# інакше він намагатиметься виділяти і перебрати діапазон значень в дужках як кілька URL-адрес
# curl -X GET "http://127.0.0.1:8055/items/PERSONS?filter\[id\]\[_eq\]=persons_name" | jq
# отримати записи з таблиці PERSONS для яких id="persons_name_1" або id="persons_name_2"
curl -g -X GET "http://127.0.0.1:8055/items/PERSONS?filter[id][_in]=persons_name_1,persons_name_2" | jq
Запит для отримання ID зображень
curl -g -X GET "http://127.0.0.1:8055/items/PERSONS/persons_name_1?fields=images.*" | jq
Оскільки у вас декілька картинок (M2M), Directus створив приховану таблицю зв’язку (наприклад, PERSONS_files). У тому ж списку Public ролей знайдіть цю таблицю (вона може бути в розділі “System” або просто в загальному списку). Дайте їй дозвіл на Read (All Access).
Directus: за замовчуванням він не зберігає поле під назвою “url” у базі. Він зберігає лише метадані файлу, а посилання на картинку завжди будується за шаблоном /assets/. { “data”: { “images”: [ { “directus_files_id”: “c1b1e886-0c6c-4e95-9a15-e60f9c2d8988” }, { “directus_files_id”: “783a7c0f-f281-4794-bde9-f9229de68fce” } ] } }
http://127.0.0.1:8055/assets/c1b1e886-0c6c-4e95-9a15-e60f9c2d8988
Directus мініатюри не мають власних унікальних ID у базі даних. Усі ваші зображення (і оригінал, і будь-які зменшені копії) використовують той самий ID, який ви вже отримали.
Directus генерує мініатюри “на льоту”, коли ви додаєте параметри до URL запиту до активів. Як отримати мініатюру за допомогою ID:
Використовуйте отриманий ID (наприклад, 36465f7c…) і просто змініть шлях запиту: Проста зміна розміру (ширина 200px): http://127.0.0.1:8055/assets/?width=200 Квадратна мініатюра (200x200, обрізана по центру): http://127.0.0.1:8055/assets/?width=200&height=200&fit=cover Мініатюра низької якості (для швидкого завантаження): http://127.0.0.1:8055/assets/?quality=10
Якщо ви хочете використовувати “Пресет” (Thumbnail Preset): У Directus можна створити іменований пресет (наприклад, назвати його small-thumb), щоб не писати кожен раз цифри в URL. Зайдіть в Settings → Files → Image Transformations. Створіть пресет з ключем thumb (наприклад, 200x200). Викликайте його так: http://127.0.0.1:8055/assets/?key=thumb