2015年6月25日 星期四

Mongo 的 BSON 格式與匯出匯入問題

前些陣子在備份 mongodb 時,遇到了一些格式的問題,然而在看完官方的參考資料(
Import and Export MongoDB Data 和 BSON)後,想以此篇提醒自己。

Mongo在處理的資料格式為 BSON,它看起來的格式如同 JSON 一樣,但要注意的是他不會用 [] 以及 , 來區別每一個 documents 。

舉例來說 JSON 會如此來描述一個結構:

[
    { "_id":"ord123","title":"test1" },
    { "_id":"ord456","title":"test2" },
    { "_id":"ord789","title":"test3" }
]

然而 BSON 會如此來描述:

{ "_id":"ord123","title":"test1" }
{ "_id":"ord456","title":"test2" }
{ "_id":"ord789","title":"test3" }

而 BSON 就是 Mongo import&export 的預設格式,因此 BSON 格式就是 Mongo 所預設接受的檔案格式,這也不代表不能夠匯入JSON格式的檔案,只要在 mongoimport 指令最後加入 --jsonArray,就可以以我們習慣的JSON格式來作為匯入 Mongodb 的檔案格式。

2015年5月23日 星期六

Nodejs實作(3) - Socket.io + MySQL 即時同步訊息

這一個練習是延續上一篇 Nodejs實作(2) - Socket.io 實現多人即時同步聊天室,但是加上了 MySQL,想做訊息儲存,另一方面也是想要模仿例如 Facebook,Twitter 等即時狀況同步的情況。

新增 MySQL Table

status table structure

設置 Node 環境


設置此次運行環境因此先在當前目錄設定  package.json 安裝待會用到的套件及相依性,並且利用 command line 在當前目錄 npm install
package.json


撰寫 server.js


引入套件並且設置好 MySQL 連線資訊,再來設定 route.
撰寫 socket.io function,來處理 client端與server端互動功能,注意以下幾個 socket.io 的用法:
  1. io.sockets.emit:觸發所有 sockets(Client端)。
  2. io.sockets.on:等待所有進入的 sockets(Client端)。
  3. socket.emit:與 socket.on 相搭配,為event driven之用法,但對像為單一特定 socket。
  4. socket.on
可以注意第26行, add_status 所等待的 callback 為 res,而 res 是 MySQL 處理連接以及query成功與否的 callback


撰寫 index.html

可注意第10行,當socket與server連接上後,JQuery去判斷是否 add_status 的按鈕是否被按下,若有的話就將 comment 欄位的資訊當作參數,並且 emit 'status add' 這個事件,然而若 server.js 的 res 為 true的話,則將 status 播送到每個連接上的 sockets(Client端)。


結果

開兩個瀏覽器測試


資料庫現況
最後就成功拉!感覺還滿好玩的,這一次練習就是在釐清 socket.io , event driven , callback 的相關實作。


參考