使用node js require()时循环?

时间:2016-02-15 03:17:17

标签: javascript node.js express

目前我已经定义了必需文件,如下所示。

myApp.controller('myController', function($routeParams, $scope, $http, API_URL){
    ......
});

注意到所有路径都是相同的路径,而require变量与文件名相似 我不想重复这个程序x次,因为它违反了DRY原则 是否可以在这里使用foreach循环。例如:动态读取文件夹中的所有文件并使用require来分配它?

3 个答案:

答案 0 :(得分:2)

类似于BradyCartmell的答案,但有点整洁;

var fs = require('fs');

var constantPath = './config/file/';
var files = { };

fs.readdir(constantPath, function(err, modules) {
  if (err) {
    throw err;
  }

  modules
    .filter(function (module) {
      return module.slice(module.length - 3) === '.js';
    })
    .forEach(function (module) {
      files[module] = require(constantPath + module);
    });
});

注意到差异;

  • 我认为你在调用require
  • 时不必修剪“.js”
  • 存储在文件对象中,而不是全局存储...这是粗略的

注意:请注意这是异步的,因此请妥善编写其余代码(即从fs.readdir回调中触发它。

为了完整性,如果你想要同步版本以避免烦恼;

var fs = require('fs');

var constantPath = './config/file/';
var files = { };

fs.readdirSync(constantPath)
  .filter(function (module) {
    return module.slice(module.length - 3) === '.js';
  })
  .forEach(function (module) {
    files[module] = require(constantPath + module);
  });

答案 1 :(得分:2)

如果该文件夹的每个文件都需要作为脚本,您可能需要明确要求所有文件的内容。

节点模块require-all可以使用。

<强>的NodeJS:

require('require-all')(__dirname + '/config/file/');

您还可以使用模块require-dir

<强>的NodeJS:

require('require-dir')('./config/file');

希望这有帮助。

答案 2 :(得分:0)

const fs = require('fs');

var modsDir = './mods/dir';
fs.readdir(modsDir, (err, fileNames) => {
  if (err) throw err;
  fileNames.forEach((fileName) => {
    if (fileName.slice(fileName.length-3) === '.js') {
      fileName = fileName.slice(0, fileName.length-3);

      // This feels dirty
      global[fileName] = require(modsDir+fileName);

    }
  });
});

应该封装以隔离modsDir,但无论如何这都显示了它的要点。