رفع الوسائط على قاعدة بيانات MongoDB باستخدام Express.js

السلام عليكم يا اخوان

أعمل على مشروع باستخدام Node.js وExpress.js وأستخدم قاعدة بيانات MongoDB وتطلَّب مني أن أضيف إليه خاصية لرفع الوسائط على قاعدة البيانات ولكن قبل أن أضيفها أردت أن أعرف ما هي أفضل طريقة لرفع الوسائط كالصور مثلًا على قاعدة بيانات مونجو؟

هل:

أنشئ مجلد خاص داخل المشروع ثم تُحفظ الصور عليه ويتم حفظ مساراتها فقط داخل قاعدة البيانات

أم:

يُحفظ الكود المصدري للصور مباشرة داخلها!

مع ذكر محاسن وعيوب كل منهما، وإذا توفرت طريقة ثالثة لا بأس من ذكرها أيضًا.


أولا لرفع الوسائط (مثل الصور أو ملفات الفيديو) إلى قاعدة بيانات MongoDB باستخدام Express.js، يمكن اتباع الخطوات التالية:

1. تثبيت المكتبات:

تأكد من تثبيت مكتبة `multer` لمعالجة رفع الملفات و `mongoose` للتفاعل مع قاعدة بيانات MongoDB.

npm install multer mongoose express

2. تكوين Multer:

في ملف Express، قم بتكوين `multer` لمعالجة الوسائط.

const express = require('express');

const multer = require('multer');

const app = express();

const storage = multer.memoryStorage();

const upload = multer({ storage: storage });

// ربط المعالج بمسار معين

app.post('/upload', upload.single('file'), (req, res) => {

// يمكنك هنا التعامل مع البيانات المرفوعة وحفظها في MongoDB

const fileData = req.file.buffer; // البيانات الثنائية للملف

// اتصال بقاعدة البيانات وحفظ البيانات

// ...

res.send('تم رفع الملف بنجاح');

});

app.listen(3000, () => {

console.log('الخادم يعمل على المنفذ 3000');

});

3. تكوين Mongoose:

قم بتكوين اتصال مع قاعدة بيانات MongoDB باستخدام `mongoose`.

   const mongoose = require('mongoose');

   mongoose.connect('mongodb://localhost:27017/اسم-قاعدة-البيانات', {
     useNewUrlParser: true,
     useUnifiedTopology: true
   });

   const db = mongoose.connection;

   db.on('error', console.error.bind(console, 'خطأ في الاتصال بقاعدة البيانات:'));
   db.once('open', () => {
     console.log('تم الاتصال بقاعدة البيانات بنجاح');
   });
   ```

4. **حفظ الوسائط في MongoDB:**
   داخل المعالج المسؤول عن الرفع، استخدم Mongoose لحفظ الوسائط في قاعدة البيانات.

   ```javascript
   const mongoose = require('mongoose');

   const fileSchema = new mongoose.Schema({
     data: Buffer,
     contentType: String
   });

   const FileModel = mongoose.model('File', fileSchema);

   app.post('/upload', upload.single('file'), async (req, res) => {
     const fileData = req.file.buffer;
     const contentType = req.file.mimetype;

     const newFile = new FileModel({ data: fileData, contentType: contentType });
     await newFile.save();

     res.send('تم رفع الملف بنجاح');
   });

يجب التأكد من تعديل الأكواد وفقا لاحتياجات مشروع وتغيير اسم قاعدة البيانات والحقول المستخدمة وفقا لتصميم قاعدة البيانات الخاصة بكل مشروع.

شكرًا يا أخ محمد وجزاك الله خير الجزاء

العفو، في الخدمة أخي مازن.