我正在开发自己的node模块,以便将其放到npm网站上。此节点模块与数据库有一些交互。我需要从用户接收三个值(dbName、服务器、端口),并在我的模块中设置它们,这样我才能连接到数据库。我想到的第一件事是:要求用户打开配置文件并更改代码(将值分配给三个变量):
var dbConf = {
server: '',
port: 0,
dbName: ''
};但我认为这种方法是完全错误的。我尝试创建一个函数,并要求用户首先使用三个参数(dbName、服务器、端口)调用该函数,该函数为我完成了这项工作。然后用户首先请求我的模块,然后调用函数,最后使用模块:
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;发布于 2018-03-21 23:25:31
在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!');发布于 2018-03-22 01:23:18
这取决于你想用你的这个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)的外观。
https://stackoverflow.com/questions/49408999
复制相似问题