【问题标题】:Expose modules from module to module从一个模块到另一个模块公开模块
【发布时间】:2016-08-28 22:32:17
【问题描述】:

我的节点应用程序需要获取文件夹路径并从那里读取所有文件。

例如

moduleA
 -server.js 
 -controller 
  --load.js

在 load.js 中我有方法(loadFolderFiles),它应该获取文件的路径 路径并从中加载所有文件。

现在从模块 B 我需要模块 A 并添加文件夹路径以读取文件

应用程序 B 的结构如下:

 appB
   -src
    --files
      ---fileA.js
      ---fileB.js
   -server.js 

在 appB server.js 中,我正在执行以下操作(以加载模块 A)

var moduleA = require('moduleA')
moduleA.loadFolderFiles('/appB/src/files')

moduleA.start();

现在 moduleA 将开始为提供的路径加载文件(我想使用glob)。

我的问题是

  1. 我将 moduleA 发布为 npm 模块,我的问题应该如何公开 moduleA.loadFolderFiles的API(推荐方式)?

2.我应该如何提供它的路径(相对/绝对)并读取文件 来自模块 appB?

这是 npm 中的“moduleA”(用于测试) https://www.npmjs.com/package/samplenodeapp

这是moduleB加载moduleA的代码

 var sample = require('samplenodeapp');
    sample.start();

我公开模块a的代码如下

var express = require('express');
var loadModule = require('./controller/load')
var app = express();
function start (){
    app.listen(3001, function () {
        console.log("App is listenting on port 3000");
    })
}
module.exports = {
    start:start, 
    loadModule:loadModule
};

如您所见,我从控制器/负载中公开了方法,如下所示(为 loadFolderFiles 提供 api,可以吗?

【问题讨论】:

  • 在调用start之前是否需要先调用loadFolderFiles
  • @РоманПарадеев - 是的,应该在之前调用 loadFolderFiles :),现在我明白了......
  • 如果我想使用moduleA,我可以这样做:var moduleA = require('moduleA'); moduleA.start()?
  • @РоманПарадеев - 是的,我完全使用了这个(参见我帖子末尾的代码),这是有效的,但不确定它是否正确......因为我需要 ('./ controller/load') 将其导出,以便 appB 可以使用它。

标签: javascript node.js module npm fs


【解决方案1】:

如果需要设置加载文件夹,我建议将其移至start 参数或模块设置。

var moduleA = require('moduleA')({ loadFolder: '/path/to/folder' });

// or
var moduleA = require('moduleA');

moduleA.start({ loadFolder: '/path/to/folder' });

如果您选择将其移至模块设置,则应从该模块导出一个函数。

var createLoader = require('./controller/load');

module.exports = function (params) {
   // params === { loadFolder: '/path/to/folder' }

   var loadModule = createLoader(params.loadFolder);

   return {
       start: start,
       loadModule: loadModule
   }
};

【讨论】:

  • 谢谢 :) 所以我有两个问题 1. 如果我想在未来加载多个文件夹,那么你建议怎么做?(来自 Api 方面) 2. 建议如何阅读给定路径的文件?
  • 我一定误解了你的问题。 loadFolderFiles 是做什么的,设置上传文件夹?或者可能附加额外的中间件来表达应用程序?
  • loadFolderFiles 正在获取文件夹的路径(从包装模块/应用程序如 appB)并可能使用 fs 或 glob 加载它...(与中间件无关)
  • 那么你的版本对我来说似乎很完美。不过我会坚持使用绝对路径,它们更可靠。
  • 好的,谢谢 1+,您能否举例说明我应该如何在 moduleA 中实现这个(您的第一个建议) var moduleA = require('moduleA')({ loadFolder: '/path/to/文件夹'});
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
相关资源
最近更新 更多