البرمجة

فهم البرمجة الغير متزامنة في Node.js واستخدام MongoDB

في بداية تعلمك لـ Node.js و MongoDB بعد 15 عامًا من استخدام VB6 و MySQL، يمكن أن تكون التحولات تحديًا. تفهم طبيعة البرمجة الغير متزامنة في Node.js واستخدام MongoDB يعد خطوة هامة. دعني أشرح لك الأكواد التي كتبتها وأقدم لك بعض الإرشادات لفهم كيفية استخدام واسترجاع البيانات بشكل صحيح.

أولاً وقبل كل شيء، يجب أن تعلم أن وظيفة collection.find().toArray هي وظيفة غير متزامنة، ولذلك لا يمكنك استرجاع القيمة مباشرة منها. يجب أن تتعامل مع هذا باستخدام الوعد (Promise) أو استخدام وظيفة رد الاستدعاء (Callback function). في هذا السياق، سأستخدم وظيفة رد الاستدعاء لتبسيط الأمور.

لنقم بتعديل الكود كما يلي:

javascript
// Db1.js var MongoClient = require('mongodb').MongoClient; module.exports = { FindinCol1: function (callback) { MongoClient.connect("mongodb://localhost:27017/db1", function (err, db) { if (err) { return callback(err, null); } var collection = db.collection('col1'); collection.find().toArray(function (err, items) { if (err) { return callback(err, null); } callback(null, items); }); }); } };

وفي ملف app.js:

javascript
var a = require('./db1'); a.FindinCol1(function (err, result) { if (err) { console.error(err); } else { console.log(result); } });

التغييرات الرئيسية هي إضافة وظيفة رد الاستدعاء في Db1.js وتعديل طريقة استدعاء الدالة في app.js. يتيح لك هذا التحديث التعامل بشكل أفضل مع البرمجة الغير متزامنة والتأكد من الحصول على البيانات بشكل صحيح.

في النهاية، يُفضل أيضاً استخدام Promises و async/await لتبسيط هذه العمليات وتجنب “Callback Hell”.

المزيد من المعلومات

بالطبع، دعونا نوسع على النقاط التي تم ذكرها في المشكلة ونقدم بعض الإرشادات والمعلومات الإضافية لتفهم أفضل كيفية التعامل مع Node.js و MongoDB.

أولاً وقبل كل شيء، يجب أن نتحدث عن مفهوم البرمجة الغير متزامنة في Node.js. Node.js هو بيئة تشغيل للجافا سكريبت مبنية على محرك V8، ويستخدم نموذج الحدث المحوري لتنفيذ العمليات بشكل فعال دون حاجة للانتظار. هذا يعني أن العمليات لا تنتظر بعضها بعضًا، وتستمر في التنفيذ بينما تنتظر العمليات الأخرى تكتمل.

عند العمل مع قواعد البيانات، مثل MongoDB، يصبح التعامل مع العمليات الغير متزامنة أمرًا حيويًا. في مثالك، لديك استخدام لوظيفة collection.find().toArray التي تتطلب وقتاً لاسترجاع البيانات. لهذا السبب، يجب أن تتعامل مع هذه الوظائف باستخدام Callbacks أو Promises.

التعديل الذي قمت به في الكود يستخدم Callbacks، حيث يتم تمرير وظيفة الرد عند الاستدعاء للتعامل مع البيانات بعد اكتمال العملية.

إذا كنت ترغب في استخدام Promises، يمكنك تحديث الكود كالتالي:

javascript
// Db1.js var MongoClient = require('mongodb').MongoClient; module.exports = { FindinCol1: function () { return new Promise((resolve, reject) => { MongoClient.connect("mongodb://localhost:27017/db1", function (err, db) { if (err) { return reject(err); } var collection = db.collection('col1'); collection.find().toArray(function (err, items) { if (err) { return reject(err); } resolve(items); }); }); }); } };

وفي app.js:

javascript
var a = require('./db1'); a.FindinCol1() .then(result => { console.log(result); }) .catch(err => { console.error(err); });

هذا يستخدم Promises لجعل الكود أكثر قراءة وفهمًا، ويسمح لك باستخدام then و catch للتعامل مع النتائج أو الأخطاء بشكل أنظف.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر