[英]developing a node module
我正在開發自己的節點模塊,將其放在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;
在你的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!');
取決於您要如何使用此myModule.someMethod
。 如果發布最小,完整和可驗證的示例,則更容易。
盡管如此,您的代碼仍有一些容易發現的問題:
首先, mongoose.connect
需要一個String
參數,正如您在此處看到的那樣,但是您正在傳遞一個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
)的外觀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.