العمل مع قواعد البيانات في TypeScript: PostgreSQL و MongoDB للمبتدئين
\n\nنادرًا ما يخلو تطوير الويب الحديث من قواعد البيانات. يوفر TypeScript، باعتباره إضافة صارمة التوصيف فوق JavaScript، إمكانيات ممتازة للعمل الآمن والمتوقع مع البيانات. في هذه المقالة، سنشرح كيفية توصيل واستخدام قاعدتي بيانات شائعتين - PostgreSQL العلائقية و MongoDB الموجهة للمستندات - في مشاريع TypeScript. المادة موجهة للمطورين المبتدئين الذين لديهم معرفة أساسية بـ TypeScript و Node.js.
\n\n1. إعداد البيئة وتثبيت التبعيات
\n\nقبل البدء، تأكد من تثبيت Node.js و npm. للعمل مع TypeScript، قم بتثبيت المترجم والأنواع لـ Node.js:
\n\nnpm install -g typescript\nnpm init -y\nnpm install typescript @types/node --save-dev\nnpx tsc --init\n\nللعمل مع قواعد البيانات، سنستخدم المكتبات الشائعة:
\n- \n
- TypeORM — ORM لـ PostgreSQL (وقواعد بيانات SQL الأخرى) \n
- Mongoose — ODM لـ MongoDB \n
قم بتثبيتها في مشروعك:
\n\nnpm install typeorm reflect-metadata pg\nnpm install mongoose\n\nلا تنس إضافة "experimentalDecorators": true و "emitDecoratorMetadata": true في ملف tsconfig.json.
2. العمل مع PostgreSQL عبر TypeORM
\n\nPostgreSQL هو نظام إدارة قواعد بيانات علائقية قوي. يتيح لك TypeORM العمل معه من خلال الكيانات (entities) والمستودعات (repositories)، مما يجعل الكود نظيفًا ومكتوبًا بشكل محدد.
\n\n2.1. إنشاء الاتصال والكيان
\n\nلنقم بإنشاء ملف data-source.ts لإعداد الاتصال:
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\nالآن لنقم بإنشاء كيان User في ملف 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. عمليات CRUD مع TypeORM
\n\nمثال على إنشاء وجلب المستخدمين:
\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 // إنشاء\n const newUser = userRepository.create({\n name: "إيفان",\n email: "ivan@example.com",\n age: 25\n });\n await userRepository.save(newUser);\n console.log("تم إنشاء المستخدم:", newUser);\n\n // قراءة الكل\n const users = await userRepository.find();\n console.log("جميع المستخدمين:", users);\n\n // تحديث\n await userRepository.update({ id: 1 }, { age: 26 });\n\n // حذف\n await userRepository.delete({ id: 1 });\n}\n\nmain().catch(console.error);\n\nيقوم TypeORM تلقائيًا بتوليد استعلامات SQL، وتحمي توصيفات TypeScript من الأخطاء في مرحلة التجميع.
\n\n3. العمل مع MongoDB عبر Mongoose
\n\nMongoDB هي قاعدة بيانات NoSQL تخزن البيانات بتنسيق مشابه لـ JSON. يوفر Mongoose مخططًا والتحقق من الصحة لـ TypeScript.
\n\n3.1. الاتصال وتحديد المخطط
\n\nلنقم بإنشاء ملف db.ts للاتصال:
import mongoose from "mongoose";\n\nexport async function connectDB() {\n await mongoose.connect("mongodb://localhost:27017/mydb");\n console.log("تم الاتصال بـ MongoDB");\n}\