Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Подключение базы данных

Статьи и комментарии блога нужно где-то хранить. С базой данных в AdonisJS работает Lucid — официальная ORM: она выполняет SQL-запросы, запускает миграции и даёт модели. Настроить подключение нужно один раз.

Установка

Если при создании проекта вы выбрали базу данных, Lucid уже установлен. Иначе добавьте его:

node ace add @adonisjs/lucid

Команда спросит, какую СУБД использовать, установит драйвер, создаст config/database.ts и допишет переменные в .env и start/env.ts.

СУБДnpm-драйверКогда выбирать
SQLitebetter-sqlite3Учёба и небольшие проекты: база в одном файле
PostgreSQLpgРабочие проекты
MySQLmysql2Если хостинг даёт только 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 dbConfig

connection выбирает подключение по умолчанию. 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.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.