首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开发节点模块

问开发节点模块
EN

Stack Overflow用户
提问于 2018-03-21 22:29:14
回答 2查看 74关注 0票数 0

我正在开发自己的node模块,以便将其放到npm网站上。此节点模块与数据库有一些交互。我需要从用户接收三个值(dbName、服务器、端口),并在我的模块中设置它们,这样我才能连接到数据库。我想到的第一件事是:要求用户打开配置文件并更改代码(将值分配给三个变量):

代码语言:javascript
复制
var dbConf = {
    server: '',
    port: 0,
    dbName: ''
};

但我认为这种方法是完全错误的。我尝试创建一个函数,并要求用户首先使用三个参数(dbName、服务器、端口)调用该函数,该函数为我完成了这项工作。然后用户首先请求我的模块,然后调用函数,最后使用模块:

代码语言:javascript
复制
var myModule = require('myModule');
myModule.config('TestDB', 'localhost', 27017);
myModule.someMethod()...

但是我不知道如何写我的index.js文件来做这项工作!我写了这样的东西:(index.js)

代码语言:javascript
复制
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:

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

发布于 2018-03-21 23:25:31

在module.js文件中

代码语言:javascript
复制
let alertMethod = (message) => {
    console.log(message);
}

let myModule = (database, server, port) => {

    return {
        alert: alertMethod
    }
}

module.exports = myModule;

app.js文件

代码语言:javascript
复制
let myModule = require('./module');

const _module = myModule('database', 'server', 'port');

_module.alert('YO!');
票数 1
EN

Stack Overflow用户

发布于 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并传递参数以创建连接字符串之前,它将在您第一次导入模块时被调用。

你可以这样做的一个例子是组织你的模块:

代码语言:javascript
复制
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
}

然后,您将像这样使用它

代码语言:javascript
复制
var myModule = require('./index.js')
myModule.config('TestDB', 'localhost', 27017);
myModule.connect();

这个示例还可以让您了解其他方法(如myModule.someMethod)的外观。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49408999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档