Nit*_*inD 6 mongodb node.js express node-mongodb-native
我使用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');
});
});
Run Code Online (Sandbox Code Playgroud)
解决方案(在app init连接并将连接字符串分配给全局变量).但我相信将连接字符串分配给全局变量并不是一个好主意.
var mongodb; var url ='[connectionString]'; MongoClient.connect(url,function(err,db){
assert.equal(null,err); mongodb = db;});
我想在应用程序初始化时创建一个连接,并在整个应用程序生命周期中使用.
你能帮助我吗?谢谢.
Mat*_*att 20
创建一个Connection类来管理apps数据库连接.
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)
}
}
Connection.db = null
Connection.url = 'mongodb://127.0.0.1:27017/test_db'
Connection.options = {
bufferMaxEntries: 0,
reconnectTries: 5000,
useNewUrlParser: true
}
module.exports = { Connection }
Run Code Online (Sandbox Code Playgroud)
无论你require('./Connection.js')到哪里,Connection.connectToMongo()方法都将可用,Connection.db财产也是如此.
const router = require('express').Router()
const { Connection } = require('../lib/Connection.js')
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5356 次 |
| 最近记录: |