Подключение базы данных
Статьи и комментарии блога нужно где-то хранить. С базой данных в AdonisJS работает Lucid — официальная ORM: она выполняет SQL-запросы, запускает миграции и даёт модели. Настроить подключение нужно один раз.
Установка
Если при создании проекта вы выбрали базу данных, Lucid уже установлен. Иначе добавьте его:
node ace add @adonisjs/lucidКоманда спросит, какую СУБД использовать, установит драйвер, создаст config/database.ts и допишет переменные в .env и start/env.ts.
| СУБД | npm-драйвер | Когда выбирать |
|---|---|---|
| SQLite | better-sqlite3 | Учёба и небольшие проекты: база в одном файле |
| PostgreSQL | pg | Рабочие проекты |
| MySQL | mysql2 | Если хостинг даёт только MySQL |
SQLite
Для SQLite отдельный сервер не нужен. Настройки выглядят так:
// config/database.ts
import app from '@adonisjs/core/services/app'
import { defineConfig } from '@adonisjs/lucid'
const dbConfig = defineConfig({
connection: 'sqlite',
connections: {
sqlite: {
client: 'better-sqlite3',
connection: {
filename: app.tmpPath('db.sqlite3'),
},
useNullAsDefault: true,
migrations: {
naturalSort: true,
paths: ['database/migrations'],
},
},
},
})
export default dbConfigconnection выбирает подключение по умолчанию. app.tmpPath('db.sqlite3') — путь к файлу tmp/db.sqlite3 в проекте: он появится при первом запросе к базе.
PostgreSQL
Для PostgreSQL параметры доступа берутся из .env:
DB_HOST=127.0.0.1
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=secret
DB_DATABASE=blog// config/database.ts
import env from '#start/env'
import { defineConfig } from '@adonisjs/lucid'
const dbConfig = defineConfig({
connection: 'postgres',
connections: {
postgres: {
client: 'pg',
connection: {
host: env.get('DB_HOST'),
port: env.get('DB_PORT'),
user: env.get('DB_USER'),
password: env.get('DB_PASSWORD'),
database: env.get('DB_DATABASE'),
},
migrations: {
naturalSort: true,
paths: ['database/migrations'],
},
},
},
})
export default dbConfigСаму базу blog нужно создать заранее, например командой createdb blog или в pgAdmin.
Проверка подключения
Добавьте временный маршрут, который выполнит простой SQL-запрос:
// start/routes.ts
import router from '@adonisjs/core/services/router'
import db from '@adonisjs/lucid/services/db'
router.get('/db-check', async () => {
await db.rawQuery('select 1')
return 'База подключена'
})Откройте /db-check. Если видите «База подключена», всё настроено. Если нет — в терминале будет причина: неверный пароль, база не существует, сервер не запущен.
Частая ошибка
После переключения с SQLite на PostgreSQL забывают поменять connection в начале config/database.ts, и приложение продолжает писать в файл SQLite. Значение connection должно совпадать с одним из ключей объекта connections.