簡體   English   中英

開發節點模塊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM