我正在开发自己的节点模块,将其放在npm网站上。此节点模块与数据库有一些交互。我需要从用户(dbName,server,port)接收三个值,并在我的模块中设置它们,以便我可以连接到数据库。我想到的第一件事就是: 要求用户打开配置文件并更改代码(将值分配给三个变量):
var dbConf = {
server: '',
port: 0,
dbName: ''
};
但我认为这种做法完全错了。我试图创建一个函数,并要求用户首先使用三个参数(dbName,server,port)调用该函数,该函数为我工作。然后用户首先需要我的模块,然后调用该函数,最后使用模块:
var myModule = require('myModule');
myModule.config('TestDB', 'localhost', 27017);
myModule.someMethod()...
但我不知道如何编写我的index.js文件来完成这项工作!我写了这样的东西:(index.js)
var config = function(dbName, server, port ) {
var dbConf = {
server: '',
port: 0,
dbName: ''
};
dbConf.server = server;
dbConf.port = port;
dbConf.dbName = dbName ;
return 'mongodb://' + dbConf.server + ':' + dbConf.port + '/' +
dbConf.dbName;
}
//connect to mongoDB local server
mongoose.connect(config);
module.exports = {
config: config,
mongoose: mongoose
};
但它没有用。我怎么能做这个工作?
更新: index.js:
function gridFS(dbName, server, port) {
var dbUrl = 'mongodb://' + server + ':' + port + '/' + dbName;
this.mongoose = mongoose.connect(dbUrl);
this.db = mongoose.connection;
this.gfs = gridfsLockingStream(this.mongoose.connection.db,
this.mongoose.mongo);
//if the connection goes through
this.db.on('open', function (err) {
if (err) throw err;
console.log("connected correctly to the server");
});
this.db.on('error', console.error.bind(console, 'connection error:'));
}
gridFS.prototype.putFile = function putFile(...) {};
gridFS.prototype.getFileById = function getFileById(id, callback) {
this.putFile(); //here is the problem
}
module.exports = gridFS;
答案 0 :(得分:1)
在你的module.js文件中
let alertMethod = (message) => {
console.log(message);
}
let myModule = (database, server, port) => {
return {
alert: alertMethod
}
}
module.exports = myModule;
app.js文件
let myModule = require('./module');
const _module = myModule('database', 'server', 'port');
_module.alert('YO!');
答案 1 :(得分:0)
取决于您对此myModule.someMethod
的所有权。如果您发布Minimal, Complete, and Verifiable example,则会更容易。
尽管如此,您的代码有一些容易发现的问题:
首先,mongoose.connect
需要一个String
参数,因为您可以看到here,但您传递的是function
。您的config
会返回String
,是的,但是function
(您需要调用它才能获得String
)。
这给我们带来了第二个问题,当你像你一样打电话给mongoose.connect
时,在你第一次导入模块之前会立即调用它,然后才能调用myModule.config
并通过你的用于创建连接字符串的参数。
如何做到这一点的一个例子是像这样组织你的模块:
var config = function(dbName, server, port ) {
this.connectionString = 'mongodb://' + server + ':' + port + '/' + dbName;
}
var connect = function() {
mongoose.connect(this.connectionString);
}
module.exports = {
config: config,
connect: connect
}
然后你会像这样使用它
var myModule = require('./index.js')
myModule.config('TestDB', 'localhost', 27017);
myModule.connect();
此示例还应该让您了解其他方法(如myModule.someMethod
)的外观。