在Node.js中导出新对象

在Node.js中导出新对象,node.js,Node.js,如何将变量端口、主机、数据库传递到此函数中 //myjs.js var redisCaller = function(port,host,database){ }; module.exports = new redisCaller(); 如果我这样做: var myjs = require('./myjs'); 如何传递这些变量 看来唯一的办法是这样的: module.exports = function(port,host,database){ return new redi

如何将变量端口、主机、数据库传递到此函数中

//myjs.js

var redisCaller = function(port,host,database){

};

module.exports = new redisCaller();
如果我这样做:

var myjs = require('./myjs');
如何传递这些变量

看来唯一的办法是这样的:

module.exports = function(port,host,database){

    return new redisCaller(port,host,database);
}
将myjs.js更改为:

module.exports=redisCaller

然后你可以做:

var myjs=require('./myjs')(端口、主机、数据库)

将myjs.js更改为:

module.exports=redisCaller

然后你可以做:

var myjs=require('./myjs')(端口、主机、数据库)

您不需要

您设置代码的方式使得不可能传入变量,除非您调整所需的参数。这样,您就可能需要了解在其中使用的任何文件中的端口/主机/数据库

相反,可能只是使用一个“init”

例如,app.js-

var redisCaller = require('./myjs');
redisCaller.init(port, host, database);
还有MyJ

var redisCaller = function(){
    this.init = function (port,host,database) {
        this.connection = ...
    }
    this.getConnection = function () {
        if(!this.connection) { throw "Need to run init first"; }
        return this.connection;
    }
};

module.exports = new redisCaller();
任何你需要连接的地方

var redisCaller = require('./myjs');
var conn = redisCaller.getConnection();

//or 

var redisCaller = require('./myjs').getConnection();
它的代码要多一点,但至少它很容易跨文件重用。。假设这是你的意图。

你没有

您设置代码的方式使得不可能传入变量,除非您调整所需的参数。这样,您就可能需要了解在其中使用的任何文件中的端口/主机/数据库

相反,可能只是使用一个“init”

例如,app.js-

var redisCaller = require('./myjs');
redisCaller.init(port, host, database);
还有MyJ

var redisCaller = function(){
    this.init = function (port,host,database) {
        this.connection = ...
    }
    this.getConnection = function () {
        if(!this.connection) { throw "Need to run init first"; }
        return this.connection;
    }
};

module.exports = new redisCaller();
任何你需要连接的地方

var redisCaller = require('./myjs');
var conn = redisCaller.getConnection();

//or 

var redisCaller = require('./myjs').getConnection();

它的代码要多一点,但至少它很容易跨文件重用。。假设这是您的意图。

@AlexMills您可能不希望每次需要模块时都返回一个
新的
呼叫。或者你是这样做的?是的,你是对的,对于一个单身汉来说,你希望总是返回同一个对象,我会更改标题这在我尝试时看起来不正确,我在OP中所做的编辑确实有效though@AlexMills不过,您可能不希望每次需要模块时都返回一个
新的
调用。或者你是这样做的?是的,你是对的,对于一个单身汉来说,你希望总是返回同一个对象,我会更改标题。当我尝试时,标题看起来不正确,我在OP中所做的编辑确实有效,但请看我的编辑和Tony的答案,我想你可以调整它使其更容易工作。但是你的答案也会有用。请看我的编辑和Tony的答案,我认为你可以调整它使其更容易工作。但你的答案也会起作用。