Node.js中如何将MongoDB数据库连接传递到各路由模块
实现方案
步骤1:抽离数据库连接逻辑到独立文件
新建db/connect.js文件,写入如下内容,将原有的连接逻辑迁移到该文件,最后导出mongoose实例:
const mongoose = require('mongoose'); // 数据库连接 mongoose.connect("mongodb://localhost:27017/codingWaifus", { useNewUrlParser: true, useUnifiedTopology: true // 新版本Mongoose建议添加该配置避免警告 }, function(err, db){ if(err){ console.log(err); } else{ console.log("Connected to "+mongoose.connection.name+" on Port: "+mongoose.connection.port); } }); mongoose.connection.on('error', console.error.bind(console, 'MongoDB connection error:')); module.exports = mongoose;
步骤2:在入口文件初始化连接
在入口文件index.js中引入该连接文件完成初始化,建议将服务启动逻辑放在连接成功的回调中,避免未完成连接时收到请求报错:
const express = require('express'); const app = express(); // 引入连接文件,执行后自动初始化数据库连接 const mongoose = require('./db/connect'); // 其他中间件、路由注册逻辑写在这里 // app.use(xxx) // app.use('/api/xxx', 路由模块) // 连接成功后启动服务 mongoose.connection.once('open', () => { app.listen(3000, () => { console.log('服务已启动在端口3000'); }); });
步骤3:路由文件中复用连接
任意路由文件中直接引入之前导出的mongoose实例即可使用,无需重复调用连接逻辑:
const express = require('express'); const router = express.Router(); // 引入全局mongoose实例,已经完成连接初始化 const mongoose = require('../db/connect'); // 示例:定义业务Schema和数据模型 const WaifuSchema = new mongoose.Schema({ name: String, skill: String }); const WaifuModel = mongoose.model('Waifu', WaifuSchema); // 示例查询接口 router.get('/waifus', async (req, res) => { const data = await WaifuModel.find(); res.json({ code: 200, data }); }); module.exports = router;
注意:Mongoose默认维护单例连接,只要全局成功调用过一次mongoose.connect,所有位置引入的mongoose实例都会复用同一个数据库连接,无需手动传递连接对象。
内容的提问来源于stack exchange,提问作者Gigi Carti
相关产品推荐
相关产品推荐

