"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > إنشاء واجهة برمجة تطبيقات CRUD سريعة ومرنة باستخدام برامج تشغيل Node.js وMongoDB الأصلية

إنشاء واجهة برمجة تطبيقات CRUD سريعة ومرنة باستخدام برامج تشغيل Node.js وMongoDB الأصلية

تم النشر بتاريخ 2024-08-21
تصفح:729

Building a Fast and Flexible CRUD API with Node.js and MongoDB Native Drivers

استخدام Node.js وExpress مع برامج تشغيل MongoDB الأصلية: لماذا وكيف

إذا كنت تعمل مع Node.js وExpress، فربما واجهت Mongoose، وهي مكتبة ODM (نمذجة بيانات الكائنات) الشهيرة لـ MongoDB. على الرغم من أن Mongoose يوفر الكثير من الميزات المفيدة، إلا أن هناك أسبابًا قد تجعلك تختار العمل مباشرة مع برامج التشغيل الأصلية لـ MongoDB. في هذا المنشور، سأطلعك على فوائد استخدام برامج تشغيل MongoDB الأصلية ومشاركة كيفية تنفيذ واجهة برمجة تطبيقات CRUD بسيطة معهم.

لماذا نستخدم برامج تشغيل MongoDB الأصلية؟

  1. الأداء : توفر برامج تشغيل MongoDB الأصلية أداءً أفضل من خلال التفاعل المباشر مع MongoDB بدون طبقة التجريد الإضافية التي يقدمها Mongoose. يمكن أن يكون هذا مفيدًا بشكل خاص للتطبيقات عالية الأداء.

  2. المرونة : توفر برامج التشغيل الأصلية تحكمًا أكبر في استعلاماتك وتفاعلات البيانات. يفرض Mongoose، بمخططاته ونماذجه، بعض الهياكل، التي قد لا تكون مثالية لكل حالة استخدام.

  3. تقليل الحمل : باستخدام برامج التشغيل الأصلية، يمكنك تجنب العبء الإضافي للحفاظ على مخططات ونماذج Mongoose، والتي يمكن أن تبسط قاعدة التعليمات البرمجية الخاصة بك.

  4. فرصة التعلم : العمل مباشرة مع برامج التشغيل الأصلية يساعدك على فهم عمليات MongoDB بشكل أفضل ويمكن أن يكون تجربة تعليمية رائعة.

تنفيذ واجهة برمجة تطبيقات CRUD مع برامج تشغيل MongoDB الأصلية

إليك دليل خطوة بخطوة حول كيفية إعداد واجهة برمجة تطبيقات CRUD بسيطة باستخدام برامج التشغيل الأصلية Node.js وExpress وMongoDB.

1. إعداد اتصال قاعدة البيانات

قم بإنشاء ملف 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 };

2. حدد النموذج الخاص بك

قم بإنشاء ملف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;

3. إعداد الطرق

قم بإنشاء ملف 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;

4. تنفيذ وحدات التحكم

قم بإنشاء ملف 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;

5. التكوين

قم بتخزين سلسلة اتصال MongoDB في ملف .env وقم بإنشاء ملف db.config.js لتحميله:

module.exports = {
    url: process.env.DB_CONFIG,
};

خاتمة

يمكن أن يكون التبديل من برامج التشغيل Mongoose إلى MongoDB الأصلية خيارًا استراتيجيًا لمشاريع معينة، مما يوفر فوائد الأداء ومرونة أكبر. يجب أن يمنحك التنفيذ المقدم هنا أساسًا متينًا لبدء إنشاء التطبيقات باستخدام برامج التشغيل الأصلية لـ Node.js وMongoDB.

لا تتردد في التحقق من الكود الكامل على GitHub واستكشاف المزيد من الميزات أو التحسينات لمشاريعك الخاصة!

أي أسئلة أخرى لا تتردد في التعليق.

ترميز سعيد! ?

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/jafeer_shaik_f5895990c4ae/building-a-fast-and-flexible-crud-api-with-nodejs-and-mongodb-native-drivers-2i1h?1 إذا كان هناك أي انتهاك يرجى الاتصال بـ Study_golang @163.comdelete
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3