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。
您可以创建默认的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)
| 归档时间: |
|
| 查看次数: |
6260 次 |
| 最近记录: |