v1.2adapters/sqlite
Tile.JS
Tile.JS

Lifecycle e conexão

Entenda connect, disconnect, isConnected e o comportamento por adapter.

Lifecycle e conexão

A classe Database expõe um lifecycle simples:

await database.connect();
console.log(database.isConnected()); // true
await database.disconnect();

O que cada método faz

connect()

  • chama storage.connect?.() quando o adapter implementa o método
  • marca o estado interno da instância como conectada
  • registra logs quando o logger está habilitado

disconnect()

  • chama storage.flush?.() antes de encerrar
  • depois chama storage.disconnect?.() quando disponível
  • marca o estado interno como desconectado

isConnected()

  • retorna apenas o estado interno da instância Database
  • não verifica ativamente o estado real do driver remoto

Leitura correta de isConnected()

isConnected() é um flag local do Database. Ele não faz ping em MongoDB, não consulta o estado de uma Connection do Mongoose e não prova que a conexão remota está saudável naquele instante.

Comportamento por backend

Backendconnect()disconnect()Observação
Adapter padrãoopcionalfaz flush() antes de encerrarútil para marcar o ciclo da aplicação e forçar persistência pendente
MongoDBchama client.connect() se manageClient !== falsechama client.close() se manageClient !== falsecom manageClient: false, o consumidor controla o client
Mongooseconecta via uri ou aguarda a conexão existentefecha/desconecta se manageConnection !== falseaceita instância mongoose ou Connection
Adapter customizadodepende da implementaçãodepende da implementaçãoo contrato é definido por StorageAdapter

Preciso chamar connect() sempre?

Na prática, o CRUD pode funcionar mesmo sem um connect() explícito quando o adapter não exige isso.

Ainda assim, em aplicações reais, é uma boa prática abrir e fechar o ciclo de forma explícita:

src/index.ts
import { database } from "./database/index.ts";

async function main() {
  await database.connect();

  const total = await database.member.countDocuments();
  console.log({ total });

  await database.disconnect();
}

void main();

Quando isso importa mais

  • CLIs: para garantir flush antes do processo terminar
  • workers: para padronizar boot e shutdown
  • apps com MongoDB/Mongoose: para decidir se o Tile ou o consumidor gerenciam a conexão
  • testes: para deixar setup e teardown explícitos

Se você usa MongoDB ou Mongoose com conexão já gerenciada em outro ponto da aplicação, geralmente faz sentido configurar manageClient: false ou manageConnection: false e delegar esse lifecycle ao seu bootstrap principal.

Próximos passos

On this page