将猫鼬连接传递给模块

Fez*_*sta 5 mongoose mongodb node.js

我正在编写一个 Node 模块,它可以对 MongoDB 执行查询。

我的模块应该new MyModule(db)将 MongoDB 连接作为参数(当我用 初始化它时)并在其中使用它。

我使用的是没有任何 NPM 模块的标准 MongoDB,并且我正在将我的 db 变量传递到与 MongoDB 的连接。现在我要切换到 Mongoose,但找不到将 Mongoose 连接传递到我的模块的方法。

我不想在我的模块内初始化 Mongoose 连接,因为我想与我的测试和其他模块共享它。

我能怎么做?我试过传递mongoose给我的模块,但它不起作用“不是一个函数”。

编辑:

阅读@Neil Lunn 的回复后,我发布了我的模块示例:

(function () {
    "use strict";

    /**
     *  various requires
     */

    function TopicManager(dbURI) {
        if (!(this instanceof TopicManager)) { return new TopicManager(dbURI); }
        mongoose.connect(dbURI);
    }

    TopicManager.prototype.save = function (topics, done) {

        var Topic = new mongoose.schema(
            {
                title: { type: String },
                slug: { type: String, index: { unique: true } }
            },
            {collection : "topics"}
        );

        /**
         * Use monguurl on "slug"
         */

        mongoose.update(
            {title: topic.title},
            {upsert: true},
            function (err, numberAffected, raw) {
                if (err) { return done(err); }
                return done(null, raw);
            }
        );    
    };

    module.exports = TopicManager;
})();
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为当我使用它undefined is not a function时,我会在它运行时得到new mongoose

Chr*_*n P 4

您可以创建默认的Mongoose 连接

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test');

var db = mongoose.connection;
Run Code Online (Sandbox Code Playgroud)

如果你想打开多个连接,你可以使用createConnection

var dbconnection = mongoose.createConnection ('uri,uri');
Run Code Online (Sandbox Code Playgroud)

然后,该连接对象可用于创建/检索仅限于该连接的模型。

Mongoose 连接对象有多个事件,您可以在其上附加处理程序。您应该查看文档以获取可以使用的处理程序的完整列表。

首先,基本方法是:

// log connection errors
db.on('error', console.error.bind(console, 'connection error:'));

// wait for opening the connection
db.once('open', function () {
   // do something once connection to the MongoDB is open
});
Run Code Online (Sandbox Code Playgroud)

如果您使用 打开连接createConnection,则需要在创建模型时使用它:

// dbconnection is created using createConnection
var MyModel = dbconnection.model('MyModel', MyModelSchema);
Run Code Online (Sandbox Code Playgroud)