Javascript 在节点web应用程序中,是否为每个HTTP请求打开一个MongoDB连接?
我正在将MongoDB添加到我的Express.js节点web应用程序中。到目前为止,我得到的是:Javascript 在节点web应用程序中,是否为每个HTTP请求打开一个MongoDB连接?,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我正在将MongoDB添加到我的Express.js节点web应用程序中。到目前为止,我得到的是: // in app.js var mongodb = require('mongodb'); var mongourl = /* … */; // These are just examples: app.get('/write', function (req, res) { mongodb.connect(mongourl, function (err, db) {
// in app.js
var mongodb = require('mongodb');
var mongourl = /* … */;
// These are just examples:
app.get('/write', function (req, res) {
mongodb.connect(mongourl, function (err, db) {
db.collection('Users', function (err, coll) {
coll.insert(/* stuff */, function (err) {
res.send(200, 'Done.');
});
});
});
});
app.get('/read', function (req, res) {
mongodb.connect(mongourl, function (err, db) {
db.collection('Users', function (err, coll) {
coll.find({}, function (err, cursor) {
cursor.toArray(function (err, items) {
res.send(200, items);
});
});
});
});
});
假设我想坚持默认设置(目前):
不要关闭并重新打开连接,您只是失去了资源:使用新标准MongoClient。它为您管理池,默认为5
//require as a module to be used anywhere.
module.exports = {}
var MongoClient = require('mongodb').MongoClient;
var mongoURI = /* … */;
MongoClient.connect(mongoURI, function(err, db) {
if(err) throw err;
module.exports.users = db.collection('users');
console.log('Connected to Mongo!')
})
然后
退房:
共享详细信息:
创建连接并将其存储到var中,如db并在任何地方重复使用。或者创建5,检查连接池是的,但只从one@j_mcnally等等,为什么是5?当然是并发。您的连接迟早会被阻止查找一个人的数据,因此最好打开几个连接。因此,mongodb API基本上不支持承诺?这个assign全局变量在异步回调中看起来不太好。什么意思,它不是全局的——但是是的,您需要等待数据库连接后才能使用它…外部作用域变量是从内部作用域回调中分配给的。如果这是标准方法,很好,但我不喜欢这种模式。承诺会更好,即var db=MongoClient.connect(…)。不同意承诺会更好。关于导出,我如何导出仅在异步回调中可用的
db
值?这将帮助您。
var db = require('./db.js')
//once connected
//db.users.find()... etc