إذا كنت تعمل مع Node.js وExpress، فربما واجهت Mongoose، وهي مكتبة ODM (نمذجة بيانات الكائنات) الشهيرة لـ MongoDB. على الرغم من أن Mongoose يوفر الكثير من الميزات المفيدة، إلا أن هناك أسبابًا قد تجعلك تختار العمل مباشرة مع برامج التشغيل الأصلية لـ MongoDB. في هذا المنشور، سأطلعك على فوائد استخدام برامج تشغيل MongoDB الأصلية ومشاركة كيفية تنفيذ واجهة برمجة تطبيقات CRUD بسيطة معهم.
الأداء : توفر برامج تشغيل MongoDB الأصلية أداءً أفضل من خلال التفاعل المباشر مع MongoDB بدون طبقة التجريد الإضافية التي يقدمها Mongoose. يمكن أن يكون هذا مفيدًا بشكل خاص للتطبيقات عالية الأداء.
المرونة : توفر برامج التشغيل الأصلية تحكمًا أكبر في استعلاماتك وتفاعلات البيانات. يفرض Mongoose، بمخططاته ونماذجه، بعض الهياكل، التي قد لا تكون مثالية لكل حالة استخدام.
تقليل الحمل : باستخدام برامج التشغيل الأصلية، يمكنك تجنب العبء الإضافي للحفاظ على مخططات ونماذج Mongoose، والتي يمكن أن تبسط قاعدة التعليمات البرمجية الخاصة بك.
فرصة التعلم : العمل مباشرة مع برامج التشغيل الأصلية يساعدك على فهم عمليات MongoDB بشكل أفضل ويمكن أن يكون تجربة تعليمية رائعة.
إليك دليل خطوة بخطوة حول كيفية إعداد واجهة برمجة تطبيقات CRUD بسيطة باستخدام برامج التشغيل الأصلية Node.js وExpress وMongoDB.
قم بإنشاء ملف utils/db.js لإدارة اتصال MongoDB:
require('dotenv').config() const dbConfig = require('../config/db.config'); const { MongoClient } = require('mongodb'); const client = new MongoClient(dbConfig.url); let _db; let connectPromise; async function connectToDb() { if (!connectPromise) { connectPromise = new Promise(async (resolve, reject) => { try { await client.connect(); console.log('Connected to the database ?', client.s.options.dbName); _db = client.db(); resolve(_db); } catch (error) { console.error('Error connecting to the database:', error); reject(error); } }); } return connectPromise; } function getDb() { if (!_db) { throw new Error('Database not connected'); } return _db; } function isDbConnected() { return Boolean(_db); } module.exports = { connectToDb, getDb, isDbConnected };
قم بإنشاء ملفmodels/model.js للتفاعل مع مجموعة MongoDB:
const { ObjectId } = require('mongodb'); const db = require('../utils/db'); class AppModel { constructor($collection) { this.collection = null; (async () => { if (!db.isDbConnected()) { console.log('Waiting for the database to connect...'); await db.connectToDb(); } this.collection = db.getDb().collection($collection); console.log('Collection name:', $collection); })(); } async find() { return await this.collection.find().toArray(); } async findOne(condition = {}) { const result = await this.collection.findOne(condition); return result || 'No document Found!'; } async create(data) { data.createdAt = new Date(); data.updatedAt = new Date(); let result = await this.collection.insertOne(data); return `${result.insertedId} Inserted successfully`; } async update(id, data) { let condition = await this.collection.findOne({ _id: new ObjectId(id) }); if (condition) { const result = await this.collection.updateOne({ _id: new ObjectId(id) }, { $set: { ...data, updatedAt: new Date() } }); return `${result.modifiedCount > 0} Updated successfully!`; } else { return `No document found with ${id}`; } } async deleteOne(id) { const condition = await this.collection.findOne({ _id: new ObjectId(id) }); if (condition) { const result = await this.collection.deleteOne({ _id: new ObjectId(id) }); return `${result.deletedCount > 0} Deleted successfully!`; } else { return `No document found with ${id}`; } } } module.exports = AppModel;
قم بإنشاء ملف Index.js لتحديد مسارات API الخاصة بك:
const express = require('express'); const router = express.Router(); const users = require('../controllers/userController'); router.get("/users", users.findAll); router.post("/users", users.create); router.put("/users", users.update); router.get("/users/:id", users.findOne); router.delete("/users/:id", users.deleteOne); module.exports = router;
قم بإنشاء ملف userController.js للتعامل مع عمليات CRUD الخاصة بك:
const { ObjectId } = require('mongodb'); const Model = require('../models/model'); const model = new Model('users'); let userController = { async findAll(req, res) { model.find() .then(data => res.send(data)) .catch(err => res.status(500).send({ message: err.message })); }, async findOne(req, res) { let condition = { _id: new ObjectId(req.params.id) }; model.findOne(condition) .then(data => res.send(data)) .catch(err => res.status(500).send({ message: err.message })); }, create(req, res) { let data = req.body; model.create(data) .then(data => res.send(data)) .catch(error => res.status(500).send({ message: error.message })); }, update(req, res) { let id = req.body._id; let data = req.body; model.update(id, data) .then(data => res.send(data)) .catch(error => res.status(500).send({ message: error.message })); }, deleteOne(req, res) { let id = new ObjectId(req.params.id); model.deleteOne(id) .then(data => res.send(data)) .catch(error => res.status(500).send({ message: error.message })); } } module.exports = userController;
قم بتخزين سلسلة اتصال MongoDB في ملف .env وقم بإنشاء ملف db.config.js لتحميله:
module.exports = { url: process.env.DB_CONFIG, };
يمكن أن يكون التبديل من برامج التشغيل Mongoose إلى MongoDB الأصلية خيارًا استراتيجيًا لمشاريع معينة، مما يوفر فوائد الأداء ومرونة أكبر. يجب أن يمنحك التنفيذ المقدم هنا أساسًا متينًا لبدء إنشاء التطبيقات باستخدام برامج التشغيل الأصلية لـ Node.js وMongoDB.
لا تتردد في التحقق من الكود الكامل على GitHub واستكشاف المزيد من الميزات أو التحسينات لمشاريعك الخاصة!
أي أسئلة أخرى لا تتردد في التعليق.
ترميز سعيد! ?
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3