จัดการ mongo connection pool ในโมดูลเดียวที่มีอยู่ในตัวเอง วิธีการนี้ให้ประโยชน์สองประการ ประการแรกมันช่วยให้โค้ดของคุณเป็นโมดูลและทดสอบได้ง่ายขึ้น ประการที่สองคุณไม่ได้บังคับให้ผสมการเชื่อมต่อฐานข้อมูลของคุณในวัตถุคำขอของคุณซึ่งไม่ใช่ที่สำหรับวัตถุเชื่อมต่อฐานข้อมูล (ตามลักษณะของ JavaScript ฉันคิดว่ามันอันตรายอย่างยิ่งที่จะผสมสิ่งใด ๆ กับวัตถุที่สร้างโดยรหัสห้องสมุด) ดังนั้นโดยที่คุณจะต้องพิจารณาโมดูลที่ส่งออกสองวิธี และconnect = () => Promise
get = () => dbConnectionObject
ด้วยโมดูลดังกล่าวคุณสามารถเชื่อมต่อกับฐานข้อมูลก่อน
// runs in boot.js or what ever file your application starts with
const db = require('./myAwesomeDbModule');
db.connect()
.then(() => console.log('database connected'))
.then(() => bootMyApplication())
.catch((e) => {
console.error(e);
// Always hard exit on a database connection error
process.exit(1);
});
เมื่ออยู่บนเครื่องบินแอปของคุณสามารถโทรได้get()
เมื่อต้องการการเชื่อมต่อฐานข้อมูล
const db = require('./myAwesomeDbModule');
db.get().find(...)... // I have excluded code here to keep the example simple
หากคุณตั้งค่าโมดูล db ของคุณในลักษณะเดียวกับที่ไม่เพียง แต่คุณจะมีวิธีที่จะทำให้แน่ใจว่าแอปพลิเคชันของคุณจะไม่สามารถบู๊ตได้นอกจากว่าคุณจะมีการเชื่อมต่อฐานข้อมูล หากคุณยังไม่ได้เชื่อมต่อ
// myAwesomeDbModule.js
let connection = null;
module.exports.connect = () => new Promise((resolve, reject) => {
MongoClient.connect(url, option, function(err, db) {
if (err) { reject(err); return; };
resolve(db);
connection = db;
});
});
module.exports.get = () => {
if(!connection) {
throw new Error('Call connect first!');
}
return connection;
}