在Express 3.x中,我能够为整个应用程序重用一个MongoClient对象。
app.js
var routes = require('./routes'); // Routes for our application
MongoClient.connect('mongodb://localhost:27017/blog', function(err, db) {
"use strict";
if(err) throw err;
app.engine('html', cons.swig);
app.set('view engine', 'html');
app.set('views', __dirname + '/views');
app.use(express.cookieParser());
app.use(express.bodyParser());
// Application routes
routes(app, db);
app.listen(8082);
console.log('Express server listening on port 8082');
});
路由/ index.js
module.exports = exports = function(app, db) {
//do something
}
在express 4.0中,他们介绍了路由器中间件。像这样的东西
var routes = require('./routes/index');
app.use('/', routes);
如何将MOngoClient对象传递给路由器中间件?
答案 0 :(得分:1)
您可以使用'Mongo.js'
之类的单独模块来定义连接并存储MongoClient instance(_db)
。
然后在指定(eg bin/www by default)
的启动脚本中包含该模块并创建连接。
这样连接只会打开一次,但您也可以通过包含object (_db)
'Mongo.js'
答案 1 :(得分:1)
您仍然可以通过修改routes/index.js
var express = require('express');
var router = express.Router();
module.exports = function(db) {
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
return router;
}
请注意最后的return router
。
在您的app.js
:
MongoClient.connect('mongodb://localhost:27017/blog', function(err, db) {
...
app.use('/', routes(db))
...
}
答案 2 :(得分:0)
基本上,通过创建一个处理所有数据库操作的类,可以减少应用程序代码中的混乱。此外,回调的使用使您可以有效地处理通常在mongodb操作中通常获得的输出。
下面的示例代码清除名为"记录"的示例集合中的所有记录,有效地向回调(如果有)抛出错误,并将结果抛出到回调供您使用。
根据需要使用mongodb网站上常用的CRUD方法
@ http://mongodb.github.io/node-mongodb-native/2.2/tutorials/crud/
检查以下代码。
class SimpleMongoManager {
constructor(dbURL) {
if (!dbURL) {
console.error(`dbURL required!`);
throw (`@ constructor`);
}
this.mongoClient = require('mongodb').MongoClient;
this.assert = require('assert');
this.dbURL = dbURL;
this.collectionName = collectionName;
}
initialize(callback) {
var self = this;
this.mongoClient.connect(this.dbURL, function(err, db) {
if (err) {
console.error(err);
throw (`@ initialize @ connect`);
} else {
self.db = db;
if (callback) {
callback(db);
}
}
});
}
gracefulExit() {
var self = this;
if (self.db) {
self.db.close();
}
}
debugClearRecords(callback){
var self = this;
self.db.collection("records").deleteMany({}, function(err, result) {
if(err){
console.error(err);
throw("@ debugClearRecords @ deleteMany");
}else{
if(callback){
callback(null, result.deletedCount);
}
}
});
}
}
/* Sample Usage */
var smInstance = new SimpleMongoManager("mongodb://localhost:27017/anterior");
smInstance.initialize(function(db){
console.log("DB Connection OK!");
});
smInstance.debugClearRecords(function(err, result){
console.log(err);
console.log(result);
});
/* Sample Route */
app.get('/clear_records', function(req, res){
/* Any checks here, if user is admin, whatever. */
smInstance.debugClearRecords(function(err, result){
console.log(err);
console.log(result);
res.redirect('/');
});
});