我正在使用MongoDB 的node-mongodb-native驱动程序来编写一个网站.
我有一些关于如何管理连接的问题:
对所有请求只使用一个MongoDB连接是否足够?有任何性能问题吗?如果没有,我可以设置全局连接以在整个应用程序中使用吗?
如果没有,如果我在请求到达时打开一个新连接并在处理请求时关闭它是否合适?打开和关闭连接是否昂贵?
我应该使用全局连接池吗?我听说驱动程序有一个本机连接池.这是一个不错的选择吗?
如果我使用连接池,应该使用多少个连接?
还有其他我应该注意的事情吗?
我正在使用'mongodb'模块处理nodejs/mongodb应用程序.该应用程序启动
node main.js
Run Code Online (Sandbox Code Playgroud)
在main.js中,我连接到db并将连接保存在'db'全局变量中.然后'db'用在'server'的内部方法中.我想避免将'db'作为全局变量,但没有找到正确的方法.
我目前的main.js:
var server = require('./lib/server');
var MongoClient = require('mongodb').MongoClient;
var Server = require('mongodb').Server;
var mongoClient = new MongoClient(new Server(HOST, PORT));
db = null;
// Database connection
mongoClient.open(function(err, mongoClient) {
if(!err){
// Database selection
db = mongoClient.db(DB);
// Launch web server
server.start(); // usage of 'db' in this part
} else {
console.log(err.message);
process.exit(1);
}
});
Run Code Online (Sandbox Code Playgroud)
想要更清洁的方法吗?
UPDATE
我终于在connection.js中创建了一个模块:
var config = require('../config/config');
var url = 'mongodb://' + config.db.host + ':' + config.db.port + '/' + config.db.name; …Run Code Online (Sandbox Code Playgroud) 我正在使用Express.js和MongoLab,我遵循Heroku设置让MongoDB在我的app.js中生成这个代码.
//Mongo on Heroku Setup
var mongo = require('mongodb');
var mongoUri = process.env.MONGOLAB_URI ||
process.env.MONGOHQ_URL ||
'mongodb://localhost/mydb';
mongo.Db.connect(mongoUri, function (err, db) {
db.collection('mydocs', function(er, collection) {
collection.insert({'mykey': 'myvalue'}, {safe: true}, function(er,rs) {
});
});
});
Run Code Online (Sandbox Code Playgroud)
我的电子邮件表单(也在app.js中)有以下路由和字段:
//Routes
app.get('/', function(req, res) {
res.render('index', {
title: 'DumbyApp'
});
});
//save new email
app.post('/', function(req, res){
emailProvider.save({
address: req.param('address')
}, function( error, docs) {
res.redirect('/')
});
});
Run Code Online (Sandbox Code Playgroud)
这将在索引页面上呈现新表单,并允许我将其保存在本地但不在生产中,因为我不知道如何设置我的电子邮件集合.谁能跟我走过这个?使用MongoDB和Node.js的新手,所以可以使用一些帮助.
编辑:
在MongoLab数据库接口中,我做了一个collection调用emails.这是正确的行动方针吗?
编辑2:
这里是在app.js中定义EmailProvider以及文件本身.
app.js
var express …Run Code Online (Sandbox Code Playgroud)