Trabalhando com bancos de dados em TypeScript: PostgreSQL e MongoDB para iniciantes
\n\nO desenvolvimento web moderno raramente dispensa bancos de dados. TypeScript, como uma extensão estritamente tipada sobre JavaScript, oferece excelentes oportunidades para um trabalho seguro e previsível com dados. Neste artigo, vamos analisar como conectar e usar dois bancos de dados populares — o relacional PostgreSQL e o orientado a documentos MongoDB — em projetos TypeScript. O material é voltado para desenvolvedores iniciantes familiarizados com os fundamentos de TypeScript e Node.js.
\n\n1. Preparação do ambiente e instalação de dependências
\n\nAntes de começar, certifique-se de ter Node.js e npm instalados. Para trabalhar com TypeScript, instale o compilador e os tipos para Node.js:
\n\nnpm install -g typescript\nnpm init -y\nnpm install typescript @types/node --save-dev\nnpx tsc --init\n\nPara trabalhar com bancos de dados, usaremos bibliotecas populares:
\n- \n
- TypeORM — ORM para PostgreSQL (e outros bancos SQL) \n
- Mongoose — ODM para MongoDB \n
Instale-as no seu projeto:
\n\nnpm install typeorm reflect-metadata pg\nnpm install mongoose\n\nNão se esqueça de adicionar "experimentalDecorators": true e "emitDecoratorMetadata": true no arquivo tsconfig.json.
2. Trabalhando com PostgreSQL via TypeORM
\n\nPostgreSQL é um poderoso SGBD relacional. TypeORM permite trabalhar com ele através de entidades (entities) e repositórios, tornando o código limpo e tipado.
\n\n2.1. Criando conexão e entidade
\n\nVamos criar o arquivo data-source.ts para configurar a conexão:
import { DataSource } from "typeorm";\n\nexport const AppDataSource = new DataSource({\n type: "postgres",\n host: "localhost",\n port: 5432,\n username: "your_user",\n password: "your_password",\n database: "your_db",\n synchronize: true,\n logging: false,\n entities: ["src/entity/**/*.ts"],\n});\n\nAgora, vamos criar a entidade User no arquivo src/entity/User.ts:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";\n\n@Entity()\nexport class User {\n @PrimaryGeneratedColumn()\n id: number;\n\n @Column()\n name: string;\n\n @Column({ unique: true })\n email: string;\n\n @Column()\n age: number;\n}\n\n2.2. Operações CRUD com TypeORM
\n\nExemplo de criação e obtenção de usuários:
\n\nimport { AppDataSource } from "./data-source";\nimport { User } from "./entity/User";\n\nasync function main() {\n await AppDataSource.initialize();\n const userRepository = AppDataSource.getRepository(User);\n\n // Criação\n const newUser = userRepository.create({\n name: "Ivan",\n email: "ivan@example.com",\n age: 25\n });\n await userRepository.save(newUser);\n console.log("Usuário criado:", newUser);\n\n // Leitura de todos\n const users = await userRepository.find();\n console.log("Todos os usuários:", users);\n\n // Atualização\n await userRepository.update({ id: 1 }, { age: 26 });\n\n // Exclusão\n await userRepository.delete({ id: 1 });\n}\n\nmain().catch(console.error);\n\nTypeORM gera automaticamente as consultas SQL, e a tipagem do TypeScript protege contra erros em tempo de compilação.
\n\n3. Trabalhando com MongoDB via Mongoose
\n\nMongoDB é um banco de dados NoSQL que armazena dados em um formato semelhante a JSON. Mongoose fornece esquema e validação para TypeScript.
\n\n3.1. Conexão e definição de esquema
\n\nVamos criar o arquivo db.ts para a conexão:
import mongoose from "mongoose";\n\nexport async function connectDB() {\n await mongoose.connect("mongodb://localhost:27017/mydb");\n console.log("Conectado ao MongoDB");\n}\