gpt4 book ai didi

node.js - 我怎样才能建立一个可以从其他文件访问的全局 mongodb 连接

转载 作者:太空宇宙 更新时间:2023-11-04 03:17:52 24 4
gpt4 key购买 nike

所以我有这个主服务器文件index.js:

const express = require('express')
const app = express()

const route = require('./route')

app.use('/main', route)
app.listen(3000)

然后我就有了route.js 文件:

const express = require('express')
const router = express.Router()

router.get('/', (req, res) => {
res.send('Hello from main')
})

module.exports = router

正如标题所暗示的,如何建立全局 mongodb 连接,这样我就不必在每条路线上建立与数据库的新连接?
谢谢!

最佳答案

我很惊讶对此没有答案。最常见的模式是在单独的模块中初始化数据库连接并将其导入到任何需要它的文件中。

以下内容摘自这篇较长的文章 https://itnext.io/how-to-share-a-single-database-connection-in-a-node-js-express-js-app-fcad4cbcb1e并以回调风格编写。我对其进行了一些更新,以基于以下 promise :

/* Callback Style */

const assert = require("assert");
const client = require("mongodb").MongoClient;
const config = require("../config");
let _db;
module.exports = {
getDb,
initDb
};

function initDb(callback) {
if (_db) {
console.warn("Trying to init DB again!");
return callback(null, _db);
}
client.connect(config.db.connectionString,
config.db.connectionOptions, connected);
function connected(err, db) {
if (err) {
return callback(err);
}
console.log("DB initialized - connected to: " +
config.db.connectionString.split("@")[1]);
_db = db;
return callback(null, _db);
}
}

function getDb() {
assert.ok(_db, "Db has not been initialized. Please called init first.");
return _db;
}

/******************************************************************/
//The client
const initDb = require("./db").initDb;
const getDb = require("./db").getDb;
const app = require("express")();
const port = 3001;
app.use("/", exampleRoute);
initDb(function (err) {
app.listen(port, function (err) {
if (err) {
throw err; //
}
console.log("API Up and running on port " + port);
});
);
function exampleRoute(req, res){
const db = getDb();
//Do things with your database connection
res.json(results);
}

这是一个基于 promise 的版本,没有分号,这就是我自己做的方式。这些函数都将成为项目之间重用的候选函数。

const assert = require("assert")
const client = require("mongodb").MongoClient
const config = require("../config")
let _db
module.exports = {
getDb,
initDb
}

function initDb() {
if (_db) {
console.warn("Trying to init DB again!");
return Promise.resolve(true)
}
return client.connect(config.db.connectionString,
config.db.connectionOptions)
}

function getDb() {
assert.ok(_db, "Db has not been initialized. Please called init first.")
return _db
}

//////////////////////


const {initDb, getDb} = require("./db")
const app = require("express")()
const port = 3001

app.use("/", exampleRoute)

initDb().
then(_ =>bootServer(port))
.catch(console.log)

function bootServer(port) {
app.listen(port, function (err) {
if (err) {
Promise.reject(err)
}
console.log("API Up and running on port " + port)
Promise.resolve()
})
}

function exampleRoute(req, res){
const db = getDb();
//Do things with your database connection
res.json(results);
}

关于node.js - 我怎样才能建立一个可以从其他文件访问的全局 mongodb 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53906896/

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