Migrações de banco de dados em JavaScript (Node.js): Ferramentas e prática
O desenvolvimento de aplicações web modernas em Node.js raramente ocorre sem trabalhar com bancos de dados. À medida que o projeto cresce, a estrutura das tabelas, índices e relacionamentos inevitavelmente mudam. A execução manual de scripts SQL no servidor é um caminho para o caos e erros. A solução para este problema são as migrações de banco de dados (database migrations). Este é um mecanismo de versionamento de alterações de esquema que permite à equipe de desenvolvimento atualizar a estrutura do BD de forma síncrona e segura.
No ecossistema JavaScript, existem várias ferramentas maduras para trabalhar com migrações. Vamos considerar três abordagens principais usando bibliotecas populares como exemplo.
1. Knex.js — construtor de consultas universal
Knex.js não é apenas um construtor SQL, mas também uma ferramenta completa para migrações e seeding (preenchimento com dados de teste). Ele suporta PostgreSQL, MySQL, SQLite e outros SGBDs. A principal vantagem é que você escreve as migrações em JavaScript e o Knex as traduz para o dialeto do banco de dados específico.
Instalação e configuração
npm install knexnpm install pg # para PostgreSQLCriamos o arquivo de configuração knexfile.js:
module.exports = { development: { client: 'pg', connection: { host: 'localhost', user: 'user', password: 'pass', database: 'mydb' }, migrations: { directory: './migrations' } }};Criação e execução de migração
Vamos criar uma migração para a tabela de usuários:
npx knex migrate:make create_users_tableNa pasta migrations, aparecerá um arquivo com carimbo de data/hora. Editamos ele:
exports.up = function(knex) { return knex.schema.createTable('users', (table) => { table.increments('id').primary(); table.string('username', 100).notNullable().unique(); table.string('email').notNullable(); table.timestamps(true, true); // created_at e updated_at });};
exports.down = function(knex) { return knex.schema.dropTableIfExists('users');};Aplicamos a migração:
npx knex migrate:latestReverter a última migração:
npx knex migrate:rollbackO Knex também permite executar SQL puro dentro das migrações, se for necessária uma lógica específica.
2. Sequelize — ORM com sistema de migrações poderoso
Sequelize é um ORM popular para Node.js, suportando PostgreSQL, MySQL, MariaDB, SQLite e MSSQL. Sua CLI fornece comandos convenientes para gerar e gerenciar migrações, intimamente integradas com os modelos.
Primeiros passos
npm install sequelize sequelize-cli pgnpx sequelize-cli initCriamos um modelo e uma migração com um único comando:
npx sequelize-cli model:generate --name User --attributes username:string,email:stringIsso gera dois arquivos: o modelo models/user.js e uma migração em migrations/. Exemplo de migração:
'use strict';module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.createTable('Users', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER }, username: { type: Sequelize.STRING(100), allowNull: false, unique: true }, email: { type: Sequelize.STRING, allowNull: false }, createdAt: { allowNull: false, type: Sequelize.DATE }, updatedAt: { allowNull: false, type: Sequelize.DATE } }); }, down: async (queryInterface, Sequelize) => { await queryInterface.dropTable('Users'); }};Aplicação e reversão:
npx sequelize-cli db:m Também na biblioteca
RapidJSON para C++: guia completo com exemplos práticos
Juniper: Biblioteca GraphQL Elegante em Rust para Aplicações Web Modernas
Tokens JWT em C++: biblioteca jwt-cpp para autenticação
Guia completo de gRPC Java: exemplos práticos e instalação