当路由在单独的模块中时,如何使用 Node+Mongo 进行连接池? [复制]
Posted
技术标签:
【中文标题】当路由在单独的模块中时,如何使用 Node+Mongo 进行连接池? [复制]【英文标题】:How to do connection pooling with Node+Mongo when routes are in separate module? [duplicate] 【发布时间】:2016-04-20 04:47:55 【问题描述】:Mongo 文档展示了在同一模块中定义 MongoClient 和服务器时如何设置连接池:
var express = require('express');
var mongodb = require('mongodb');
var app = express();
var MongoClient = require('mongodb').MongoClient;
var db;
// Initialize connection once
MongoClient.connect("mongodb://localhost:27017/integration_test", function(err, database)
if(err) throw err;
db = database;
// Start the application after the database connection is ready
app.listen(3000);
console.log("Listening on port 3000");
);
// Reuse database object in request handlers
app.get("/", function(req, res)
db.collection("replicaset_mongo_client_collection").find(, function(err, docs)
docs.each(function(err, doc)
if(doc)
console.log(doc);
else
res.end();
);
);
);
如果您有一个设置服务器的app.js
和一个定义路由的api.js
,这将如何工作?
【问题讨论】:
【参考方案1】:一个简单的解决方案是在 app.js 中编写一些简单的中间件,通过请求变量将其传递给路由。
app.use(function(req, res, next)
req.db = db;
next();
);
当然,您的所有路由都可以访问req
和res
,因此他们可以通过req.db
访问它。
【讨论】:
在这种情况下,我假设 MongoClient 连接应该在中间件之前定义? 这行得通,但不管你把它放在之前还是之后,因为传递给 app.use() 的中间件函数将在每次 HTTP 请求发生时重新执行,而不仅仅是应用程序启动时一次。因此,当任何 HTTP 请求发生并且中间件函数开始被调用时,db
将已被您帖子中的 db = database;
行分配。
@Josh1billion,谢谢老兄这对我很有帮助。
@VaibhavBisht 很高兴听到这个消息以上是关于当路由在单独的模块中时,如何使用 Node+Mongo 进行连接池? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
当 /r/n 在文本中时,如何让 Notepad++ 显示单独的行?
MEAN Stack:当 Angular 在 Node 文件夹中时,如何从 Node 启动 Angular
当标识字段位于两个单独的列中时,如何检索该特定记录的最新出现? [关闭]