Trabalhando com bancos de dados em TypeScript: PostgreSQL e MongoDB na prática

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que TypeScript e bancos de dados são a combinação ideal



O desenvolvimento web moderno é impensável sem trabalhar com bancos de dados (BD). TypeScript, como uma extensão fortemente tipada sobre JavaScript, oferece aos desenvolvedores uma ferramenta poderosa para criar aplicações confiáveis e escaláveis. Neste artigo, vamos analisar na prática como conectar e usar dois dos bancos de dados mais populares — o relacional PostgreSQL e o orientado a documentos MongoDB — no ecossistema TypeScript.



Você aprenderá como configurar ORM/ODM, escrever modelos tipados e realizar operações CRUD básicas. O material é voltado para desenvolvedores que já conhecem os fundamentos de TypeScript e Node.js.



1. Configuração do projeto e instalação de dependências



Antes de escrever código, vamos criar um novo projeto e instalar os pacotes necessários. Para trabalhar com PostgreSQL, usaremos TypeORM — um dos ORMs mais populares para TypeScript. Para MongoDB, usaremos Mongoose.



Inicialização do projeto



mkdir typescript-db-practicecd typescript-db-practicenpm init -ynpm install typescript ts-node @types/node --save-devnpx tsc --init


Instalação de dependências para PostgreSQL



npm install typeorm reflect-metadata pgnpm install @types/node --save-dev


Instalação de dependências para MongoDB



npm install mongoosenpm install @types/mongoose --save-dev


Após a instalação, no arquivo tsconfig.json, certifique-se de ativar as opções "experimentalDecorators": true e "emitDecoratorMetadata": true — elas são necessárias para o funcionamento do TypeORM.



2. Trabalhando com PostgreSQL via TypeORM



TypeORM suporta tanto o padrão Active Record quanto o Data Mapper. Vamos abordar o Data Mapper, pois ele oferece mais flexibilidade e se alinha melhor com uma arquitetura limpa.



Criação da entidade (Entity)



Vamos criar um modelo de usuário. Cada entidade é uma classe decorada com anotações especiais.



// src/entities/User.tsimport { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn } from 'typeorm';

@Entity()export class User { @PrimaryGeneratedColumn() id: number;

@Column({ length: 100 }) name: string;

@Column({ unique: true }) email: string;

@Column({ select: false }) password: string;

@CreateDateColumn() createdAt: Date;}


Configuração da conexão e repositório



Vamos criar um arquivo para inicializar o banco de dados e um repositório para trabalhar com os usuários.



// src/data-source.tsimport "reflect-metadata";import { DataSource } from "typeorm";import { User } from "./entities/User";

export const AppDataSource = new DataSource({ type: "postgres", host: "localhost", port: 5432, username: "postgres", password: "password", database: "test_db", synchronize: true, // Criação automática de tabelas (apenas para desenvolvimento!) logging: false, entities: [User], migrations: [], subscribers: [],});


// src/repositories/userRepository.tsimport { AppDataSource } from "../data-source";import { User } from "../entities/User";

export const userRepository = AppDataSource.getRepository(User);


Operações CRUD na prática



// src/index.tsimport { AppDataSource } from "./data-source";import { userRepository } from "./repositories/userRepository";

async function main() { await AppDataSource.initialize(); console.log("PostgreSQL conectado!");

// CREATE const newUser = userRepository.create({ name: "Ivan Petrov", email: "ivan@example.com", password: "hashed_password" }); await userRepository.save(newUser); console.log("Usuário criado:", newUser);

// READ const us

Blogs

Book Recommendations