之前有寫過一篇文章簡單介紹如何用 Heroku 部署 App ,現在要教各位如何使用 mLab – MongoDB 插件,這裡會用到一些 Mongoose 指令,如果不清楚的話,可以看一下我的 Mongoose 指令,有問題也歡迎留言。

順便跟各位推薦一個學習網站:TreeHouse

這個算是目前包月的線上學習網站內容最豐富的一個,這篇文章也是上了「Adding MongoDB to your Node App on Heroku」這堂課才生出來的,強烈推薦給各位,之後應該也會發一篇關於各種學習平台的使用心得的文章!

2020/05/05 更新

忽然發現這篇文章的點閱率也不低,所以來更新一下這一小段,並且讓文章內容更貼近更新後的Heroku介面,個人目前最推薦的學習網站是六角學院,這個網站從前端教學起家,現在開始慢慢地跨足後端及其他領域,售後服務也非常好,持續更新人才牆及線上直播等服務,而且又是全中文資源,推薦給各位!

安裝插件

首先到我們要安裝插件的應用程式頁面,點選「Configure Add-ons」
2016-08-05 at 上午1.03

在搜尋列打上「mlab」,並安裝該插件
heroku_2

安裝完畢之後,點選「mLab MongoDB」可以看到你的 Database 的管理介面,不過這不是我們的重點
heroku_3

回到 Heroku ,點選最上方工具列的「Setting」,找到「Config Vars」這一項,點選「Reveal Config Vars」展開之後,你應該會看到多了一列「MONGODB_URI」,後面接著一串網址,這就是連線到我們的 Database 的方法,到這邊我們的前置作業就完畢了,接下來就來看一下我們的 App 該如何跟 Database 串接。

串接 mLab

載入 mongoose 的方法我就不多說了,首先是連線到我們的 mLab 資料庫,剛剛應該有看到「MONGODB_URI」這一列,這個就是我們的環境變數設定,要呼叫變數,就要用process.env.[variable]來呼叫,所以連線到 mLab 的方式很簡單,請看以下:

// 連上 mLab
mongoose.connect(process.env.MONGODB_URI);
// 如果沒有該環境變數,就用 Local 端的 MongoDB
mongoose.connect(process.env.MONGODB_URI || 'mongodb://localhost/test');

接下來就用 mongoose 建立我們的資料並存入 Database

// 建立 model,後面的 {title: String} 就是 Schema
let Post = mongoose.model('Post', { title: String });
// 建立實體Document
let post = new Post({ title: 'My Awesome Goals for 2016!' });
// 存入資料庫
post.save(function (err) {
    if (err) {
        console.log(err);
    }
    console.log('Blog post saved!');
});

這幾行就成功地在 post collection 建立了一筆資料,至於取出的方法,請看以下:
( Mongoose 使用請看:Mongoose – Node.js 連接 MongoDB

// 建立一個 Server,監聽 port
// 因為要部署在 Heroku 上,port會變動

const PORT = process.env.PORT || 1337;

http.createServer((req, res) => {
    // 從Post collection 中,撈取資料並回傳
    // 如果要篩選資料 Post.find([條件], err,posts =>{ //... })
    Post.find((err, posts) => {
        if(err) {
            return console.log(err);
        }
        console.log(posts);
        res.writeHead(200, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify(posts));
    })
}).listen(PORT, () => {
    console.log(`Server running at http://localhost:${PORT}`);
});

2016-08-05 at 上午1.36