异步初始化模块

时间:2017-01-06 08:08:22

标签: node.js express

我创建了一个需要我的模块(中间件和控制器)的功能,但我想先初始化中间件。

我的代码在同一时间初始化两个模块:

function loadModule(app, modulePath) {
  var folder = path.join(__dirname, modulePath);
  fs.readdir(folder, function(err, files) {
    _.forEach(files, function(file) {
      var controllerPath = path.join(folder, file);
      fs.stat(controllerPath, function(err, stats) {
        if (stats.isFile() && file !== 'Controller.js') {
          var loadingModulePath = './' + modulePath + '/' + file;
          console.log('Loading module : ' + loadingModulePath);
          var Module = require(loadingModulePath)(app);
        }
      });
    });
  });
}

loadModule(app, 'middlewares');
loadModule(app, 'controllers');

问题:有时控制器首先被初始化,有时候是中间件......

编辑#1:

const express   = require('express'),
  app       = express(),
  async     = require('async');


function loadModule(module, app) {
  var folder = path.join(__dirname, module);
  fs.readdir(folder, function(err, files) {
    _.forEach(files, function(file) {
      var controllerPath = path.join(folder, file);
      fs.stat(controllerPath, function(err, stats) {
        if (stats.isFile() && file !== 'Controller.js') {
          var loadingModulePath = './' + module + '/' + file;
          console.log('Loading module : ' + loadingModulePath);
          var Module = require(loadingModulePath)(app);
        }
      });
    });
  });
}

async.series([
  function(callback, app) {
    loadModule('middlewares', app);
    callback(null);
  },
  function(callback, app) {
    loadModule('controllers', app);
    callback(null);
  }
], function(err, results) {
  console.log(err, results);
});

问题编辑#1:app is undefined...

0 个答案:

没有答案