close

mongoDB

上一篇柯南分享了如何將 NodeJS App Deploy 到 Heroku 這個 PaaS 平台,
然後我發現 Heroku 平台真的還蠻厲害的,
上面有很多 Add-ons Service 可以使用,
透過這些 Add-ons Service,
我們就可以發揮「雲端」服務的特性,
將各種服務融入我們要開發的應用程式中,
例如這次要介紹的 mongoDB 服務 MongoLab。

mongoDB 是一種 NoSQL 資料庫,
所謂 NoSQL 資料庫, 
簡言之就是非關連式的資料庫,
iTHome 這篇文章  可以讓我們有些初步的了解。
而在 http://nosql-database.org/ 更有許多 NoSQL 的清單列表, 
有興趣的朋友可以連過去看看。

這次柯南選擇 mongoDB 入門,
主要原因是 heroku 平台的 Add-ons 就有 mongoDB 的選項,
而且還不只一個服務提供者。
另外一個原因是,
mongoDB 儲存資料的方式,
讓我很容易理解,
因為基本上他是用 JSON 物件的方式儲存資料的。

mongoLabStarter 

我憑感覺選了 mongoLab 做為 第一次 mongoDB 就上手的對象,(另外一家叫 MongoHQ )
240MB 就我目前要練習的小小服務,
應該是夠用的,
而且 heroku 也提供 指令可以讓我們在 終端機上下指令來啟動服務,
但壞就壞在即使是免錢的 Add-ons 都需要提供信用卡資料給 Heroku ,
難道暫時不想提供,
就沒戲唱了嗎?
答案當然是否定的。

mongolab 

我直接連到 mongolab 的網頁 https://mongolab.com/  ,
申請 mongolab 的帳號,
就可以在不用給 信用卡資料的情況下,
照樣有 240 MB 的 免費方案 可用。

唯一不同的是,
我要自己手動將 mongolab 與 heroku 上的 NodeJS App 連結起來。

我的做法如下:

1. 透過 mongolab 的網頁介面建立 DB,當建好後頁面會有連結位置的資訊。
2. 下載 mongoDB 的 客戶端程式,測試看看是可以透過第一步取得的連結登入該 DB
3. mongoDB 其實有很多 npm 可以安裝,這次柯南選擇 native driver,我們可以使用 npm install mongodb 來安裝 
4. 因為我們要 deploy 到 heroku ,所以要編寫 package.json 這個檔案,

{
    "name": "node-example",
    "version": "0.0.1",
    "dependencies": {
        …..
        "mongodb": "latest",
        ….
    },
    "engines": {
        "node": "0.6.x"
    }
}

5.  編寫我們的 nodejs 程式

var mongodb = require('mongodb');
var mongodbServer = new mongodb.Server('DB_URL', PORTNUMBER, { auto_reconnect: true });
var db = new mongodb.Db('DB_NAME', mongodbServer);
var db_account = process.env.DB_A,
       db_password = process.env.DB_P;

6. 接下來用 db.open, db.authenticate, db.collection, collection.find, collection.insert 與 db.close 來操作 database,mongoDB語法,網路上有許多參考資料,例如這篇 https://github.com/mongolab/mongodb-driver-examples/blob/master/nodejs/nodeSimpleExample.js
7.  我在測試的過程中,會先將 DB_URL 指向我本機的測試 mongoDB,當驗證執行無誤,再把 DB_URL 指向 mongoLab 的位置。
8. 將資料庫的帳號密碼寫在 code 裡面並不是很好的選擇, 幸好 Heroku 提供環境變數這招,所以在第5步的db_account 跟 db_password 我都使用 環境變數來儲存,這樣子 code 裡面就不會有這些資料了!
9. 如何在 heroku 使用 環境變數,可以參考這篇說明 https://devcenter.heroku.com/articles/config-vars 
10. git add 與 commit code 後 push 到 heroku 的 master,就完成了整個在 nodes 環境下使用 mongoDB 的操作了!

要在 NodeJS 上使用 mongoDB ,
除了 mongodb 這個 package,
還有其他種類,例如 mongoose  
有興趣的朋友趕快來動手試試看吧! 

Technorati Tags: Node.js, NodeJS, mongolab, mongoDB, heroku

arrow
arrow

    賽拉維‧柯南 發表在 痞客邦 留言(1) 人氣()