Arbeiten mit Datenbanken in TypeScript: PostgreSQL und MongoDB in der Praxis

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum TypeScript und Datenbanken ein ideales Paar sind



Moderne Webentwicklung ist ohne die Arbeit mit Datenbanken (DB) undenkbar. TypeScript, als streng typisierte Erweiterung von JavaScript, bietet Entwicklern ein leistungsstarkes Werkzeug zur Erstellung zuverlässiger und skalierbarer Anwendungen. In diesem Artikel werden wir praktisch erarbeiten, wie man die beiden beliebtesten Datenbanken – die relationale PostgreSQL und die dokumentenorientierte MongoDB – in der TypeScript-Ökosystem einbindet und nutzt.



Sie erfahren, wie Sie ORM/ODM einrichten, typisierte Modelle schreiben und grundlegende CRUD-Operationen durchführen. Das Material richtet sich an Entwickler, die bereits mit den Grundlagen von TypeScript und Node.js vertraut sind.



1. Projekteinrichtung und Installation der Abhängigkeiten



Bevor wir Code schreiben, erstellen wir ein neues Projekt und installieren die erforderlichen Pakete. Für die Arbeit mit PostgreSQL verwenden wir TypeORM – eines der beliebtesten ORMs für TypeScript. Für MongoDB verwenden wir Mongoose.



Projektinitialisierung



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


Installation der Abhängigkeiten für PostgreSQL



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


Installation der Abhängigkeiten für MongoDB



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


Nach der Installation müssen Sie in der Datei tsconfig.json unbedingt die Optionen "experimentalDecorators": true und "emitDecoratorMetadata": true aktivieren – diese werden für die Arbeit mit TypeORM benötigt.



2. Arbeiten mit PostgreSQL über TypeORM



TypeORM unterstützt sowohl Active Record- als auch Data Mapper-Muster. Wir betrachten Data Mapper, da es mehr Flexibilität bietet und besser mit einer sauberen Architektur harmoniert.



Erstellen einer Entität (Entity)



Wir erstellen ein Benutzermodell. Jede Entität ist eine Klasse, die mit speziellen Annotationen dekoriert ist.



// 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;}


Einrichtung der Verbindung und des Repositorys



Wir erstellen eine Datei zur Initialisierung der Datenbank und ein Repository für die Arbeit mit Benutzern.



// 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, // Automatische Tabellenerstellung (nur für die Entwicklung!) 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);


CRUD-Operationen in der Praxis



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

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

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

// READ const us

Blogs

Buchempfehlungen