Seu carrinho está vazio no momento!

Introdução (3 min)
Imagine a planta de uma casa. A cada reforma, você precisa atualizar a planta para refletir as mudanças, certo? Migrations em bancos de dados são exatamente isso: um registro histórico das alterações na estrutura do seu banco de dados. Elas são essenciais para APIs modernas porque permitem que você evolua seu esquema de dados sem perder informações ou quebrar a aplicação. Nesta aula, vamos construir um sistema simples de migrations usando Node.js e um banco de dados SQLite, ideal para ambientes como o HostGator Plano M.
No contexto Node.js/Express, as migrations se tornam ainda mais relevantes, pois permitem gerenciar as mudanças no banco de dados de forma organizada e consistente à medida que sua API evolui, facilitando a colaboração em equipe e deployments mais seguros.
Conceito Fundamental (7 min)
Migrations, ou migrações de banco de dados, são como um controle de versão para o seu esquema. Cada migration representa uma alteração específica, como adicionar uma coluna, criar uma tabela ou modificar um tipo de dado. A terminologia da indústria geralmente inclui termos como “up” (para aplicar a mudança) e “down” (para reverter a mudança). Imagine um script que descreve exatamente o que precisa ser feito no banco para cada atualização.
Em produção, migrations são vitais para garantir a consistência dos dados em diferentes ambientes (desenvolvimento, teste, produção). Elas se integram com ORMs (Object-Relational Mappers) como Sequelize e TypeORM, simplificando ainda mais o processo. Bibliotecas como knex facilitam a criação e execução dessas migrações.
As vantagens incluem controle de versão, replicabilidade e segurança. A principal desvantagem é a complexidade adicional inicial, mas que se paga a longo prazo.
Implementação Prática (10 min)
const knex = require('knex')({
client: 'sqlite3',
connection: {
filename: './mydb.sqlite'
},
useNullAsDefault: true, // Essencial para SQLite
migrations: {
directory: './migrations'
}
});
// Migration 1: Criar tabela de usuários
// ./migrations/20231122160000_create_users_table.js
exports.up = function(knex) {
return knex.schema.createTable('users', (table) => {
table.increments('id').primary();
table.string('name').notNullable();
table.string('email').unique().notNullable();
table.timestamp('created_at').defaultTo(knex.fn.now());
});
};
exports.down = function(knex) {
return knex.schema.dropTableIfExists('users');
};
// Migration 2: Adicionar coluna "last_name"
// ./migrations/20231122160100_add_last_name_to_users.js
exports.up = function(knex) {
return knex.schema.table('users', (table) => {
table.string('last_name');
});
};
exports.down = function(knex) {
return knex.schema.table('users', (table) => {
table.dropColumn('last_name');
});
};
// Executar as migrations
knex.migrate.latest()
.then(() => {
console.log('Migrations executadas com sucesso!');
knex.destroy(); // Fechar a conexão após o uso
})
.catch((error) => {
console.error('Erro ao executar migrations:', error);
knex.destroy(); // Fechar a conexão mesmo em caso de erro
});
Instalar o knex
📚 Informações da Aula
Curso: API Completo - Node.js & Express
Tempo estimado: 25 minutos
Pré-requisitos: JavaScript básico
npm install knex sqlite3
Criar o diretório migrations
mkdir migrations
Executar as migrations
npx knex migrate:latest
Este código demonstra como criar e executar migrations com knex e SQLite. A configuração é compatível com HostGator Plano M. Observe o error handling robusto e a documentação inline. Note a importância do useNullAsDefault: true para SQLite e o fechamento da conexão com knex.destroy() após o uso. O formato de nome de arquivo das migrations YYYYMMDDHHmmss_nome_da_migration.js garante a ordem de execução.
Exercício Hands-On (5 min)
Crie uma nova migration para adicionar uma coluna age (inteiro) à tabela users. Lembre-se de implementar também a função down para reverter a alteração. Execute a migration com npx knex migrate:latest.
Solução:
// ./migrations/20231122160200_add_age_to_users.js
exports.up = function(knex) {
return knex.schema.table('users', (table) => {
table.integer('age');
});
};
exports.down = function(knex) {
return knex.schema.table('users', (table) => {
table.dropColumn('age');
});
};
Para validar, verifique se a coluna age existe na tabela users usando um cliente SQLite ou uma query SQL. Em caso de erros, revise o código da migration e o log do knex.
Próximos passos: Explore outras funcionalidades do knex, como seeds para popular o banco de dados, e integre migrations com um framework como o Express.
🚀 Pronto para a próxima aula?
Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!