模块导出使用两个不同的approches

时间:2016-05-16 07:30:18

标签: javascript node.js express module requirejs

我的节点应用程序包含以下代码(我放置了代码结构的示例)

server.js 中的此代码,即 nodeModule 入口点

function run() {
    app.listen(3001, function () {
        console.log("App is listenting on port 3000");
    })
}

function addPath(args) {
    plug.loadF(args.loadFolder);
};

function preProcess (args) {

    if (_.isEmpty(args)) {
        run();
    }
};

module.exports = preProcess();
module.exports ={
    run: run,
    addPath: addPath
}

正如你可以看到导出两次这样,当从 CMD (调用server.js)和 second 调用app / module时,我支持这两个选项用于在node_modules

下使用代码作为依赖进行调用
  1. module.exports = preProcess(); module.exports = preProcess();是我的app / nodeModule从外部程序调用,如java / buildpack,并且没有传递args

  2. 导出runaddPath,如果我的模块在用户应用中安装为node_moudule,并且您想通过代码调用这些API

  3. 我的问题是节点中有更好的方法来编写那些出口,或者它是否正常?

1 个答案:

答案 0 :(得分:1)

您必须了解节点中提供的导出模块。

  

module.exports对象由Module系统创建。有时   这是不可接受的;许多人希望他们的模块成为一个实例   一些课。为此,请将所需的导出对象指定给   module.exports。请注意,将所需对象分配给导出将   只需重新绑定本地导出变量,这可能不是什么   你想做什么。

https://nodejs.org/api/modules.html#modules_module_exports

简单来说,exports模块为您提供了将整个代码包装在一个文件中的功能,以便可以在另一个文件中重用它。

因此显然一个文件只能导出一个对象。

在上面的代码中,您需要将方法封装到一个对象中:

var server = {}
server.run = function () {
    app.listen(3001, function () {
        console.log("App is listenting on port 3000");
    })
}

server.addPath = function addPath(args) {
    plug.loadF(args.loadFolder);
};

server.preProcess = function (args) {

    if (_.isEmpty(args)) {
        run();
    }
};

module.exports = server 

现在,您可以在任何其他页面上执行以下操作:

var server = require ("../../path/to/server.js")
server.preProcess() // Call to preprocess function
server.addPath () // Call to addPath function
server.run() // Call to run function 

基本上我已将所有方法封装到单个服务器中。对象然后导出对象。