首頁 > web前端 > js教程 > 主體

詳解讀Node.js模組間共享資料庫連接的方法(圖文教學)

亚连
發布: 2018-05-21 11:25:03
原創
1794 人瀏覽過

我們可以寫一個統一的資料庫連接模組來供本地Node環境下各模組間共享使用,接下來就來詳解Node.js模組間共享資料庫連接的方法

這個標題本身就是一個命題,因為使用預設方式的情況下,一個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.js
var M = require('mongoose');
// connect to database 连接数据库
M.connect('mongodb://localhost/test');
// ... some other code ...

// ----- flight.js -----
// require mongoose.js 引用mongoose.js
var 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 上面看到的。 上面是我整理給大家的,希望今後對大家有幫助。

相關文章:

詳細解讀JavaScript中的幾種借用方法(圖文教學)

利用JavaScript實現模式匹配的String方法

######javascript### this詳細解說(圖文教學)#########

以上是詳解讀Node.js模組間共享資料庫連接的方法(圖文教學)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!