【发布时间】:2023-03-14 05:21:01
【问题描述】:
这对我来说有点不清楚(我刚刚开始使用 Node 和 Mongo),并且由于服务器性能和压力(我想这是另一个问题,但我会得到到文章末尾)。
所以,假设我正在使用 Node.js 和 Restify 编写 API,其中每个 API 端点对应一个函数,我应该:
a) 打开数据库连接并将其存储在全局变量中,然后在每个函数中使用它?
示例:
// requires and so on leave me with a db var, assume {auto_reconnect: true}
function openDB() {
db.open(function(err, db) {
// skip err handling and so on
return db;
}
}
var myOpenDB = openDB(); // use myOpenDB in every other function I have
b) 打开数据库连接,然后把所有东西都放在一个巨大的闭包中?
示例:
// same as above
db.open(function(err, db) {
// do everything else here, for example:
server.get('/api/dosomething', function doSomething(req, res, next) { // (server is an instance of a Restify server)
// use the db object here and so on
});
}
c) 每次需要时打开和关闭数据库?
示例:
// again, same as above
server.get('/api/something', function doSomething(req, res, next) {
db.open(function(err, db) {
// do something
db.close();
});
});
server.post('/api/somethingelse', function doSomethingElse(req, res, next) {
db.open(function(err, db) {
// do something else
db.close();
});
});
最后一个是我凭直觉会做的,但同时我也觉得这样做不太舒服。它不会对 Mongo 服务器造成太大压力吗?尤其是当(我希望我确实做到了)它会收到数百(如果不是数千)这样的电话吗?
提前谢谢你。
【问题讨论】: