我使用Node-Mongo-Native并尝试设置全局连接变量,但是我对两种可能的解决方案感到困惑。你们可以帮我选哪一个是好人吗?1.解决方案(这很糟糕,因为每个请求都将尝试创建新的连接。)
var express = require('express');
var app = express();
var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
// Connection URL
var url = '[connectionString]]';
// start server on port 3000
app.listen(3000, '0.0.0.0', function() {
// print a message when the server starts listening
console.log("server starting");
});
// Use connect method to connect to the server when the page is requested
app.get('/', function(request, response) {
MongoClient.connect(url, function(err, db) {
assert.equal(null, err);
db.listCollections({}).toArray(function(err, collections) {
assert.equal(null, err);
collections.forEach(function(collection) {
console.log(collection);
});
db.close();
})
response.send('Connected - see console for a list of available collections');
});
});
var mongodb; var url =’[connectionString]’;
MongoClient.connect(url,function(err,db){
assert.equal(null,err); mongodb = db;});
我想在应用初始化时创建一个连接,并在整个应用生命周期内使用它。
你们能帮我吗?谢谢。
创建一个Connection
类来管理apps数据库连接。
MongoClient不提供单例连接池,因此您不想MongoClient.connect()
在应用程序中重复调用。包裹mongo客户端的单例类适用于我见过的大多数应用程序。
const MongoClient = require('mongodb').MongoClient
class Connection {
static connectToMongo() {
if ( this.db ) return Promise.resolve(this.db)
return MongoClient.connect(this.url, this.options)
.then(db => this.db = db)
}
// or in the new async world
static async connectToMongo() {
if (this.db) return this.db
this.db = await MongoClient.connect(this.url, this.options)
return this.db
}
}
Connection.db = null
Connection.url = 'mongodb://127.0.0.1:27017/test_db'
Connection.options = {
bufferMaxEntries: 0,
reconnectTries: 5000,
useNewUrlParser: true,
useUnifiedTopology: true,
}
module.exports = { Connection }
require('./Connection')
该Connection.connectToMongo()
方法在您的任何地方都可用,Connection.db
如果属性已初始化,则该方法也将可用。
const router = require('express').Router()
const { Connection } = require('../lib/Connection.js')
// Better if this goes in your server setup somewhere and waited for.
Connection.connectToMongo()
router.get('/files', (req, res) => {
Connection.db.collection('files').find({})
.then(files => res.json({ files: files })
.catch(err => res.json({ error: err })
})
module.exports = router
我使用Node Mongo Native并试图设置一个全局连接变量,但我对两种可能的解决方案感到困惑。你们能帮我找出哪一个是好的吗?1.解决方案(这很糟糕,因为每个请求都会尝试创建新连接。) 解决方案(在app init连接并将连接字符串分配给全局变量)。但我认为将连接字符串指定给全局变量不是一个好主意。 var mongodb;var url='[connectionString]';Mongo
问题内容: 我使用10gen的本机node.js驱动器将mongodb(2.2.2)与node.js一起使用。 起初一切顺利。但是当涉及到并发基准测试部分时,会发生很多错误。频繁进行1000次并发连接/关闭可能会导致mongodb拒绝任何进一步的请求,并出现以下错误: 另外,如果许多客户端在没有显式关闭的情况下关闭,则mongodb将花费几分钟的时间来检测并关闭它们。这也将导致类似的连接问题。(使
我试试看。js与mongodb(2.2.2)一起使用本机节点。js drive by 10gen。 起初一切都很顺利。但在并发基准测试部分,出现了很多错误。频繁连接/关闭1000次并发可能会导致mongodb拒绝任何进一步的请求,错误如下: 此外,如果很多客户端在没有显式关闭的情况下关闭,mongodb需要几分钟来检测并关闭它们。这也会导致类似的连接问题。(使用/var/log/mongodb/m
问题内容: 我有一个方法可以执行一些超时任务。我使用ExecutorServer.submit()获取Future对象,然后使用超时调用future.get()。这工作正常,但是我的问题是处理可能由我的任务引发的检查异常的最佳方法。以下代码可以正常工作,并保留检查的异常,但是如果方法签名中的检查的异常列表发生更改,则显得非常笨拙且容易中断。 对于如何解决这个问题,有任何的建议吗?我需要以Java
事实上中的变量比变量慢,这是众所周知的,并且已经在本网站的不同问题中讨论过了。然而,我仍然没有找到答案的一件事是,使用代码中不同函数内部使用的全局变量(如常量)的最佳和最快的方法是什么? 到目前为止,我能找到的最佳解决方案是定义一个函数,在这里我将全局变量分配给局部变量。 输出: 但这是一个丑陋的解决方案,而且比使用局部变量还要慢。在函数内部使用全局/常量变量等效的最著名的方法是什么,而不必将它们
我有一个超时执行任务的方法。我使用ExecutorServer.submit()获取一个Future对象,然后调用future.get()并超时。这很好,但是我的问题是处理我的任务可能抛出的检查异常的最好方法。下面的代码工作正常,并且保留了被检查的异常,但是如果方法签名中被检查的异常的列表改变了,它看起来非常笨拙并且容易出错。 关于如何解决这个问题的任何建议?我需要以Java 5为目标,但我也很好