Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用两种不同的方法导出模块_Javascript_Node.js_Express_Module_Requirejs - Fatal编程技术网

Javascript 使用两种不同的方法导出模块

Javascript 使用两种不同的方法导出模块,javascript,node.js,express,module,requirejs,Javascript,Node.js,Express,Module,Requirejs,我使用以下代码创建了一个节点应用程序(我将代码结构的示例放在下面) 这段代码位于server.js中,它是我的节点模块的入口点 function run() { app.listen(3001, function () { console.log("App is listenting on port 3000"); }) } function addPath(args) { plug.loadF(args.loadFolder); }; functio

我使用以下代码创建了一个节点应用程序(我将代码结构的示例放在下面)

这段代码位于server.js中,它是我的节点模块的入口点

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)调用app/module时,我支持这两个选项,第二次用于在节点_modules下使用代码作为依赖项进行调用

  • 对于
    module.exports=preProcess()
    
    module.exports=preProcess()是指从外部程序(如java/buildpack)调用my app/nodeModule,且未传递任何参数

  • 导出
    run
    addPath
    ,如果我的模块作为用户应用程序中的节点模块安装,并且您希望通过代码调用这些API


  • 我的问题是,在node中有更好的方法来编写这些导出,或者如果可以的话?

    您必须了解node中提供的导出模块

    module.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 
    

    基本上,我已经将所有方法封装到一个“服务器”对象中,然后导出该对象。

    在这种情况下,最好使用
    exports
    而不是新的局部变量
    server
    。用法问题。我喜欢让我的全局对象不杂乱无章。@salemahmed-感谢您的代码,当您以代码调用它为例时,它可以工作,但如果没有节点代码调用,它将如何工作?如果其他程序通过CMD调用它并调用server.js,它需要调用运行服务器之类的过程…您能否提供一个示例,同时回答module.exports=preProcess()?@alexmac-使用exports是什么意思?像我一样?如果没有,请提供示例,谢谢sir@SaleemAhmed-当模块从外部资源调用时,我需要一些逻辑,比如IIFE。。。