gpt4 book ai didi

node.js - 在 expressJS 中处理 mongodb 连接

转载 作者:IT老高 更新时间:2023-10-28 13:18:07 24 4
gpt4 key购买 nike

我正在使用 expressJS 和 mongoDB,我尝试将在一个地方打开的 mongodb 连接保持到整个应用程序。

我该怎么做?

我不想每次都在我的每个路由/模型文件中打开它,它看起来像:

moods.js(示例文件,我有很多,每个收藏一个)

exports.findAll = function(req, res) {
db.collection('moods', function(err, collection) {
collection.find().toArray(function(err, items) {
res.send(items);
});
});
};

.... some other methods

和主 app.js 文件:

var express = require('express');
var routes = require('./routes');
var mood = require('./routes/moods');


var http = require('http');
var path = require('path');

var app = express();


// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'hjs');
app.use(express.favicon());
...

app.get('/moods', mood.findAll);

....
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});

现在,我应该把这段代码放在哪里,只存在一次并为我的每个集合文件工作?我的意思是打开一个连接,而不是每次我想查询我的数据库时打开新连接。

         var mongodb = require('mongodb');
var db = new mongodb.Db('xxxx',
new mongodb.Server('xxxx', 10059, {})
);
db.open(function (err, db_p) {
if (err) { throw err; }
db.authenticate('xxxx', 'xxxx', function (err, replies) {
// You are now connected and authenticated.
});
});

最佳答案

您有几个合理的选择。这真的是个人喜好的问题。

创建另一个模块以打开连接并让所有其他模块使用该模块:

mongo_connection.js

在该文件中,您将放置连接和身份验证代码。导出 db 实例例如:

exports.db = db;

在其他文件中,你可以require它:

var connection = require('./mongo_connection.js');
var db = connection.db;

或者,我经常(在模块中)创建一次连接,然后将其传递给路由中的初始化函数:

var users = require('./routes/users.js');
users.initialize(db);

我经常这样做,因为我想为路由提供其他常见的配置工作和设置:

var initialize = function(app, config) {

};

如果你传递 express app 实例,你也可以 set 它:

app.set('mongo', db);

然后使用 app.get('mongo') 来获取它。

关于node.js - 在 expressJS 中处理 mongodb 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20032766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com