茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    詳解Node.js模塊間共享數(shù)據(jù)庫連接的方法
    來源:易賢網(wǎng) 閱讀:1551 次 日期:2016-06-23 15:27:36
    溫馨提示:易賢網(wǎng)小編為您整理了“詳解Node.js模塊間共享數(shù)據(jù)庫連接的方法”,方便廣大網(wǎng)友查閱!

    我們可以寫一個統(tǒng)一的數(shù)據(jù)庫連接模塊來供本地Node環(huán)境下各模塊間共享使用,接下來就來詳解Node.js模塊間共享數(shù)據(jù)庫連接的方法

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

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

    背景

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

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

    正題

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

    // ----- user.js -----

    // require mongoose.js 引用mongoose.js

    var M = require('mongoose');

    // connect to database 連接數(shù)據(jù)庫

    M.connect('mongodb://localhost/test');

    // ... some other code ...

    // ----- flight.js -----

    // require mongoose.js 引用mongoose.js

    var M = require('mongoose');

    // connect to database 連接數(shù)據(jù)庫

    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 時,會出現(xiàn)如下錯誤。

    > node index.js

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

    錯誤是:嘗試打開未關(guān)閉的連接。

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

    具體方案

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

    // ----- database.js -----

    var M = require('mongoose');

    M.connect('mongodb://localhost/test');

    // reference to the database connection 為這個連接創(chuàng)建一個引用

    var db = M.connection;

    // expose to modules that require database.js 把這個引用暴露給引用 database 模塊的其他模塊

    module.exports = db;

    // ----- user.js ----- flight.js 類似 -----

    // ... some other code ...

    // 我們會在 models.js 中,把數(shù)據(jù)庫連接的引用作為參數(shù)傳進來

    module.exports = function( db ){

      if( db ){

        // ... do things with the connection ... 如果連接了數(shù)據(jù)庫,就可以執(zhí)行數(shù)據(jù)庫相關(guān)的操作了

      }

    }

    // ----- models.js -----

    // require database module, retrieve the reference to database connection 引用 databse 模塊,獲取數(shù)據(jù)庫連接的引用

    var db = require('./database');

    // 把數(shù)據(jù)庫連接的引用傳入需要連接數(shù)據(jù)庫的模塊,任務完成!

    var user = require('./user')( db ),

      flight = require('./flight')( db );

    這就是讓一個 Node.js 應用的多個模塊共享數(shù)據(jù)庫連接的一種方法。是我在 StackOverflow 上面看到的。

    更多信息請查看網(wǎng)絡編程
    易賢網(wǎng)手機網(wǎng)站地址:詳解Node.js模塊間共享數(shù)據(jù)庫連接的方法

    2026上岸·考公考編培訓報班

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)