العمل مع قواعد البيانات في TypeScript: PostgreSQL وMongoDB

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة في العمل مع قواعد البيانات في TypeScript

TypeScript هي امتداد صارم الكتابة للغة JavaScript يضيف أنواعاً ثابتة وميزات لغوية حديثة. عند تطوير تطبيقات من جانب الخادم باستخدام TypeScript، غالباً ما تكون هناك حاجة للتفاعل مع قواعد البيانات. من بين الحلول الأكثر شيوعاً نظام إدارة قواعد البيانات العلائقية PostgreSQL وقاعدة البيانات الوثائقية MongoDB. في هذه المقالة، سننظر في كيفية العمل بكفاءة مع كلتا قاعدتي البيانات باستخدام TypeScript مع مكتبات مثبتة وأفضل الممارسات.



إعداد البيئة وتثبيت التبعيات

قبل البدء، تأكد من تثبيت Node.js و npm. قم بإنشاء مشروع جديد وتثبيت الحزم اللازمة:

mkdir typescript-db-examplecd typescript-db-examplenpm init -ynpm install typescript ts-node @types/node --save-devnpx tsc --init

للعمل مع PostgreSQL، سنستخدم TypeORM — وهو ORM قوي مع دعم TypeScript. أما بالنسبة MongoDB، فسنستخدم Mongoose.

npm install typeorm reflect-metadata pgnpm install mongoose


العمل مع PostgreSQL عبر TypeORM

تكوين الاتصال بـ PostgreSQL

يدعم TypeORM المعدّدات (decorators) والسجل النشط. لنقم بإنشاء ملف data-source.ts للتكوين:

import { DataSource } from "typeorm";

export const AppDataSource = new DataSource({ type: "postgres", host: "localhost", port: 5432, username: "your_username", password: "your_password", database: "test_db", synchronize: true, logging: false, entities: ["src/entity/**/*.ts"], migrations: [], subscribers: [],});


إنشاء كيان (Entity)

لنقم بتعريف نموذج مستخدم باستخدام المعدّدات:

import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";

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

@Column() firstName: string;

@Column() lastName: string;

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

@Column({ default: true }) isActive: boolean;}


عمليات CRUD مع PostgreSQL

لنقم بتنفيذ العمليات الأساسية على قاعدة البيانات:

import { AppDataSource } from "./data-source";import { User } from "./entity/User";

async function main() { await AppDataSource.initialize(); const userRepository = AppDataSource.getRepository(User);

// CREATE const newUser = userRepository.create({ firstName: "Ivan", lastName: "Petrov", email: "ivan@example.com" }); await userRepository.save(newUser);

// READ const users = await userRepository.find(); console.log("All users:", users);

// UPDATE const userToUpdate = await userRepository.findOneBy({ id: 1 }); if (userToUpdate) { userToUpdate.isActive = false; await userRepository.save(userToUpdate); }

// DELETE await userRepository.delete({ id: 1 });}

main().catch(console.error);


العمل مع MongoDB عبر Mongoose

الاتصال بـ MongoDB

يوفر Mongoose مخططاً (schema) مريحاً والتحقق من الصحة لـ MongoDB. لنقم بإعداد الاتصال:

import mongoose, { Schema, Document, Model } from "mongoose";

const MONGO_URI = "mongodb://localhost:27017/test";

mongoose.connect(MONGO_URI) .then(() => console.log("Connected to MongoDB")) .catch(err => console.error("Connection error:", err));


تعريف المخطط والنموذج

لنقم بإنشاء واجهة (interface) لـ TypeScript ومخطط Mongoose:

// Interface for TypeScriptinterface IUser extends Document {    firstName: string;    lastName: string;    email: string;    createdAt: Date;}

// Mongoose Schemaconst userSchema = new Schema({ firstName: { type: String, required: true }, lastName: { type: String, required: true }, email: { type: String, required: true, unique: true }, createdAt: { type: Date, default: Date.now }});

// Modelexport const UserModel: Model = mongoose.model("User", userSchema);


عمليات CRUD مع MongoDB

لنقم بتنفيذ العمليات الأساسية مع MongoDB:

import { UserModel } from "./models/User";

async function main() { // CREATE const newUser = new UserModel({ firstName: "Ivan", lastName: "Petrov", email: "ivan@example.com" }); await newUser.save();

// READ const users = await UserModel.find(); console.log("All users:", users);

// UPDATE await UserModel.updateOne({ _id: newUser._id }, { isActive: false });

// DELETE await UserModel.deleteOne({ _id: newUser._id });}

main().catch(console.error);


الخاتمة

في هذه المقالة، نظرنا إلى أساسيات العمل مع PostgreSQL و MongoDB في TypeScript. يوفر TypeORM تجريداً مريحاً لقواعد البيانات العلائقية مع دعم المعدّدات والتوليد التلقائي للترحيلات (migrations). من ناحية أخرى، يقدم Mongoose نظام مخطط مرناً والتحقق من الصحة لـ MongoDB. يعتمد الاختيار بين هذه الحلول على المهام المحددة لمشروعك: PostgreSQL هو الأنسب للبيانات المنظمة ذات العلاقات المعقدة، بينما MongoDB مثالي لمخططات الوثائق المرنة والنمذجة الأولية السريعة.

المدونات

توصيات الكتب