Configuração do banco de dados
O AdonisJs vem pronto para uso para bancos de dados SQL e oferece uma API Javascript unificada para interagir com bancos de dados. Abaixo está a lista de bancos de dados suportados.
Bancos de dados suportados
- PostgreSQL
- SQLite
- MySQL
- MariaDB
- Oracle
- MSSQL
Configuração
Todo aplicativo AdonisJs vem com o suporte pré-configurado para Query builder e Lucid Orm, tudo o que você precisa fazer é ajustar a configuração conforme suas necessidades.
Por padrão, a configuração é definida para usar o SQLite como o banco de dados em desenvolvimento, que pode ser alterado usando o arquivo config/database.js
.
// config/database.js
module.exports = {
connection: Env.get('DB_CONNECTION', 'sqlite'), <1>
sqlite: {
....
}, <2>
mysql: {
....
}
}
- A propriedade
connection
define a conexão padrão a ser usada para fazer consultas SQL. - A configuração de conexão individual é definida ao lado do nome da conexão. Você está livre para criar vários blocos de configuração.
Exemplo básico
Vamos começar a tocar o provedor de banco de dados selecionando todos os usuários da tabela users
.
// Rota
Route.get('/users', 'UsersController.index')
// Controller
'use strict'
const Database = use('Database')
class UsersController {
* index (request, response) {
const users = yield Database.select('*').from('users')
response.json(users)
}
}
DICA
A sintaxe do construtor de consultas é fluente, o que significa que você pode encadear métodos para construir uma consulta SQL completa. Além disso, você não terá que alterar uma linha de código ao alternar entre vários bancos de dados.
Drivers de banco de dados e suas configurações
Como o AdonisJs suporta todos os bancos de dados SQL populares, você tem que instalar seus drivers equivalentes do npm e configurá-los conforme definido abaixo.
MySQL
Drivers disponíveis:
Configuração:
mysql: {
client: 'mysql',
connection: {
host: '127.0.0.1',
port: 3306,
user: 'root',
password: '',
database: 'adonis'
}
}
Além disso, você pode definir um caminho de soquete para construir a conexão MySQL. Fornecer o caminho do soquete ignorará as opções de host e porta.
mysql: {
client: 'mysql',
connection: {
socketPath: '/path/to/socket.sock',
user: 'root',
password: '',
database: 'adonis'
}
}
SQLite
Driver disponível:
Configuração:
sqlite: {
client: 'sqlite3',
connection: {
filename: Helpers.storagePath('development.sqlite')
}
}
PostgreSQL
Driver disponível:
Configuração:
pg: {
client: 'pg',
connection: {
host: '127.0.0.1',
port: 5432,
user: '',
password: '',
database: 'adonis',
ssl: false
}
}
Além disso, você pode passar uma string de conexão
pg: {
client: 'pg',
connection: 'postgres://user:password@host:port/database?ssl=true'
}
Oracle
Drivers disponíveis:
Configuração:
oracle: {
client: 'oracle',
connection: {
host: '127.0.0.1',
port: 1521,
user: '',
password: '',
database: 'adonis'
}
}
MariaDB
Driver disponível:
Configuração:
maria: {
client: 'mariasql',
connection: {
host: '127.0.0.1',
port: 3306,
user: 'root',
password: '',
database: 'adonis'
}
}
MSSQL
Driver disponível:
Configuração:
mssql: {
client: 'mssql',
connection: {
host: '127.0.0.1',
port: 3306,
user: 'root',
password: '',
database: 'adonis'
}
}
Depuração
A depuração de consultas de banco de dados é útil para verificar o tempo de resposta do banco de dados ou para garantir que o construtor de consultas execute o consulta correta. Vamos analisar algumas estratégias de depuração diferentes.
Globalmente
A maneira mais fácil de depurar consultas globalmente é definir o sinalizador debug
no bloco de configuração.
// config/database.js
mysql: {
client: 'mysql',
connection: {},
debug: true <1>
}
Além disso, você pode ativar a depuração no seu código ouvindo os eventos query
ou sql
no provedor de banco de dados. O melhor lugar para registrar um ouvinte é no arquivo app/Listeners/Http.js
.
// app/Listeners/Http.js
Http.onStart = function () {
Database.on('query', console.log)
Database.on('sql', console.log)
}
A única diferença entre query
e o evento sql
é a saída.
Saída do evento SQL:
+ 1.38 ms : select * from `users` where `username` = 'doe'
Saída do evento de consulta:
{
method: 'select',
options: {},
bindings: [ 'doe' ],
sql: 'select * from `users` where `username` = ?'
}
Consulta individual
Além disso, você pode depurar uma única consulta encadeando o ouvinte de eventos ao executar a consulta.
yield Database
.on('sql', console.log)
.table('users')
.where('username', 'doe')
Ou
yield Database
.debug()
.table('users')
.where('username', 'doe')