国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

詳解Node.js模塊間共享數據庫連接的方法

2019-11-20 09:55:47
字體:
來源:轉載
供稿:網友

這個標題本身就是一個命題,因為使用默認方式的情況下,一個 Node.js 應用里的各個模塊都是共享的同一個數據庫連接。但是如果姿勢不對,可能會很丑陋,甚至可能會出錯。

你可以忽略下面這部分,直接切入正題。

背景
最近在做專業課程設計,題目是“機票預訂管理系統”。需求比較簡單,就試著拿最近在學的 Node.js 來做了。本來還在調研用何種 Node.js 框架比較合適,看了幾個框架之后發現這是殺雞用牛刀,有看文檔查資料的時間還不如直接動手寫了。最后寫完我會把代碼放到 Github 上,歡迎大家批評指正。

數據庫方面,以為我比較熟悉和喜歡 JSON (SQL 沒學好就承認唄-_-#),所以就選擇了 MongoDB。Node + Mongo 是近幾年越來越熱門的后端組合,網上有很多關于如何一起使用的資料。但為了節約時間(課程設計也就一個多星期),把精力多集中在系統和邏輯上,我用了 Mongoose 這個專門用于 MongoDB 數據建模的 Node.js 擴展,用它來大大減少操作數據庫的代碼。

正題
我建立了兩個數據模型(Model),一個是用戶(User),一個是航班(Flight),分別封裝到了 user.js, flight.js 這兩個模塊(Module)里面。Model 專門負責和數據庫交互,用戶和航班這兩個模塊都需要連接數據庫,一開始我的代碼是這樣的:

// ----- user.js -----// require mongoose.js 引用mongoose.jsvar M = require('mongoose');// connect to database 連接數據庫M.connect('mongodb://localhost/test');// ... some other code ...// ----- flight.js -----// require mongoose.js 引用mongoose.jsvar M = require('mongoose');// connect to database 連接數據庫M.connect('mongodb://localhost/test');// ... some other code ...// ----- models.js -----var user = require('./user'),  flight = require('./flight');// ----- index.js -----var Models = require('./models');

且不說這種寫法一點都不 DRY,這種方式本身就是錯誤的。當我運行 index.js 時,會出現如下錯誤。

> node index.js> Connection error: { [Error: Trying to open unclosed connection.] state: 2 }

錯誤是:嘗試打開未關閉的連接。

所以我們應該在一個地方連接一次數據庫,然后其他需要連接數據庫的模塊通過這個模塊來和數據庫交互。就好像插線板,義無反顧地吼叫道:“墻上就一個插座,你們不要搶了!放著我來!你們。。。就可以了!”

具體方案
我們把連接數據庫的動作放到一個模塊里,并且把連接暴露給整個應用中的其他模塊,然后其他需要連接數據庫的模塊引用這個連接即可。

// ----- database.js -----var M = require('mongoose');M.connect('mongodb://localhost/test');// reference to the database connection 為這個連接創建一個引用var db = M.connection;// expose to modules that require database.js 把這個引用暴露給引用 database 模塊的其他模塊module.exports = db;// ----- user.js ----- flight.js 類似 -----// ... some other code ...// 我們會在 models.js 中,把數據庫連接的引用作為參數傳進來module.exports = function( db ){  if( db ){    // ... do things with the connection ... 如果連接了數據庫,就可以執行數據庫相關的操作了  }}// ----- models.js -----// require database module, retrieve the reference to database connection 引用 databse 模塊,獲取數據庫連接的引用var db = require('./database');// 把數據庫連接的引用傳入需要連接數據庫的模塊,任務完成!var user = require('./user')( db ),  flight = require('./flight')( db );

這就是讓一個 Node.js 應用的多個模塊共享數據庫連接的一種方法。是我在 StackOverflow 上面看到的。如果你有更好的方法,歡迎在評論中分享給大家!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泾川县| 松滋市| 定州市| 五大连池市| 西华县| 巴楚县| 招远市| 尼木县| 临江市| 三穗县| 舟山市| 广元市| 灌阳县| 榆林市| 古蔺县| 普兰县| 宁波市| 高雄市| 开江县| 山西省| 闵行区| 虞城县| 布尔津县| 长葛市| 苍梧县| 昌乐县| 桐乡市| 如皋市| 嘉定区| 温泉县| 保康县| 望城县| 扶余县| 岑溪市| 军事| 兴山县| 北碚区| 东乡族自治县| 西昌市| 林州市| 濮阳市|