Trabalhando com Bancos de Dados em TypeScript: PostgreSQL e MongoDB
TypeScript é uma linguagem de programação poderosa que adiciona tipagem estática ao JavaScript. No desenvolvimento de aplicações web modernas, trabalhar com bancos de dados é uma parte essencial. Neste artigo, veremos como trabalhar eficientemente com dois bancos de dados populares — o relacional PostgreSQL e o orientado a documentos MongoDB — usando TypeScript.
1. Preparação do ambiente e escolha do ORM
Antes de começar, é necessário configurar o projeto. Crie um novo projeto Node.js com suporte a TypeScript:
mkdir ts-database-democd ts-database-demonpm init -ynpm install typescript @types/node ts-node --save-devnpx tsc --initPara trabalhar com bancos de dados, usaremos bibliotecas populares:
- Prisma — ORM moderno para PostgreSQL (e outros bancos SQL)
- Mongoose — ODM para MongoDB com excelente suporte a TypeScript
Instale os pacotes necessários:
npm install prisma @prisma/client mongoosenpm install @types/mongoose --save-dev2. Trabalhando com PostgreSQL via Prisma
Prisma é um ORM que gera automaticamente tipos TypeScript com base no esquema do seu banco de dados. Isso garante segurança total de tipos.
2.1. Configuração do Prisma
Inicialize o Prisma no projeto:
npx prisma initNo arquivo prisma/schema.prisma, defina o modelo de dados:
generator client { provider = "prisma-client-js"}
datasource db { provider = "postgresql" url = env("DATABASE_URL")}
model User { id Int @id @default(autoincrement()) email String @unique name String? posts Post[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt}
model Post { id Int @id @default(autoincrement()) title String content String? published Boolean @default(false) author User @relation(fields: [authorId], references: [id]) authorId Int createdAt DateTime @default(now()) updatedAt DateTime @updatedAt}Crie o arquivo .env com a string de conexão:
DATABASE_URL="postgresql://user:password@localhost:5432/mydb"Execute a migração:
npx prisma migrate dev --name init2.2. Operações CRUD com TypeScript
Agora vamos escrever código tipado para trabalhar com o banco de dados. Crie o arquivo src/postgres.ts:
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
interface CreateUserInput { email: string; name?: string;}
interface CreatePostInput { title: string; content?: string; authorId: number;}
// Criar usuárioasync function createUser(data: CreateUserInput) { return await prisma.user.create({ data: { email: data.email, name: data.name, }, });}
// Obter todos os usuários com postsasync function getUsersWithPosts() { return await prisma.user.findMany({ include: { posts: true, }, });}
// Criar postasync function createPost(data: CreatePostInput) { return await prisma.post.create({ data: { title: data.title, content: data.content, authorId: data.authorId, }, });}
// Atualizar usuárioasync function updateUser(id: number, data: Partial<CreateUserInput>) { return await prisma.user.update({ where: { id }, data, });}
// Deletar usuárioasync function deleteUser(id: number) { return await prisma.user.delete({ where: { id }, });}
// Exemplo de uso(async () => { try { const user = await createUser({ email: 'ivan@example.com', n