• 0

تقسيم الشيفرة البرمجية ومشاركة المتغيّر app في node.js

أعمل على مشروع من خلال إطار العمل express.js و node.js وأحاول تقسيم الشيفرة البرمجية إلى عدة ملفات بدلاً من تجميعها في ملف واحد باتباع بنية شبيهة بال MVC، فقمت بوضع الكود التالي ضمن الملف الرئيسي server.js

var express   = require('express');
var app       = express.createServer();
var routes    = require('./routes');

var controllers = require('./controllers');
routes.setup(app, controllers);

app.listen(5000, function() {
  console.log('listening on port 5000');
});

وبعدها قمت بإنشاء ملفات المسارات كالتالي:

exports.setup = function(app, controllers) {
  app.get('/', controllers.index);
  app.post('/user', controllers.users.index);
  app.post('/posts/:post', controllers.posts.create);
   ...

};

ولكن كيف يمكنني مشاركة المتغيّر app الموجود في الملف الرئيسي مع المتحكّم المطلوب؟ أي هل يجب أن أقوم بإعادة تضمينه من خلال require أو يجب أن أقوم بتمريره إلى ملف المسارات وبعدها إلى المتحكّم؟ وفي حال نعم كيف يمكنني إجراء هذا التمرير؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

بما أنك تستخدم إطار العمل express، يمكنك الحصول على محتوى app من خلال req.app التي يتم تضمينها مع كل طلب. بحيث يتم إضافة أي بيانات إضافية من خلال app.set:

app.set('anykey', {})

والحصول عليها ضمن الكود يكون من خلال المتغير req الذي سيكون موجود مع كل طلب يتم ربطه بالمتحكّم الخاص به بالشكل التالي:

req.app.get('anykey')

كما يمكنك تعديل كود الملف الرئيسي لديك وجعل app متغيّر عام بهذا الشكل:

var app = module.exports = express();

app.use(app.router);

وعندها يمكنك تضمين app في الأجزاء المتفرقة من الكود لديك كالتالي:

var app = require('../app');

app.get('/', function(req, res, next) {
  res.render('index');
});

وبشكل مشابه يمكنك بباسطة تمرير المتغيرات إلى المتحكمات لديك بهذا الشكل:

var controllers = require('./controllers')({app: app});

وإنشاء واجهة عامة للمتحكمات تستقبل هذه المتغيرات:

// controllers.js

module.exports = function(params)
{
    return require('controllers/index')(params);
}

ثم الوصول إليها يكون بهذا الشكل:

// controllers/index.js

function controllers(params)
{
  var app = params.app;

  controllers.users = require('./users');

  controllers.index = function(req, res) {
    ...
  };
}

module.exports = controllers;

ويمكنك الإطلاع على طريقة مشابهة من خلال استخدام locals في node.js موجودة هنا:

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

لماذا تحتاج تمرير المتغيير app إلى ملف controllers ؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن