前面我們介紹了sinatra與mongoDB兩個我們會使用到的網頁開發框架以及資料庫系統。接下來我們就要使用並且結合他們。
接下來就必須安裝 mongo 以及 bson套件 ,如以下指令:
gem install mongo
gem install bson_ext
那我們就直接來使用sinatra來幫助我們存取mongoDB。
require 'sinatra'
require 'mongo'
require 'json/ext'
include Mongo
configure do
conn = MongoClient.new("localhost", 27017)
set :mongo_connection, conn
set :mongo_db, conn.db('Boo')
end
我們之前有建立了帳戶資料表,現在這邊我們可以看到Boo的架構是:
<db> -- <collections>
Boo -- Accounts # 帳戶資料 (帳號 密碼 朋友)
-- Dialog # 歷史訊息 (訊息 時間 日期)
那我們可以建立 helpers 幫助我們定義methods去存取使用mongoDB
helpers do
# 查詢物件ID
def object_id val
BSON::ObjectId.from_string(val)
end
# 由id搜尋密碼
def password_by_id id
id = object_id(id) if String === id
@obj = settings.mongo_db['accounts'].find_one(:_id => id).to_json
parsed = JSON.parse(@obj)
@password = parsed["password"]
end
# 由id搜尋帳戶名稱是否存在
def username_by_id id
id = object_id(id) if String === id
@obj = settings.mongo_db['accounts'].find_one(:_id => id).to_json
parsed = JSON.parse(@obj)
return parsed["username"].to_s
end
end
# 由ID找尋朋友名單
def friends_by_id id
id = object_id(id) if String === id
@obj = settings.mongo_db['accounts'].find_one(:_id => id).to_json
parsed = JSON.parse(@obj)
friends = parsed["friends"]
if friends.nil?
return nil.to_a.to_json
else
return friends.to_json
end
end
# 由對話ID取得歷史訊息
def history_by_id id
@history_obj = settings.mongo_db['dialog'].find_one(:did => id).to_json
if @history_obj.to_s == "null"
return nil.to_a.to_json
else
his_parsed = JSON.parse(@history_obj)
ch_log = his_parsed["dialog"]
return ch_log.to_json
end
end
那我們以sinatra的HTTP request GET,來使用以上我們定義的方法。
# 印出使用者帳戶
get '/username/ :id/? ' do
content_type :json
"#{ username_by_id (params[:id]).to_s}"
end
那這樣我們就可以存取mongoDB來幫助我們取得使用者帳戶名稱。
當然我們還可以進行INSERT DELETE FIND UPDATE功能。(我們可以透過查看Document來幫助我們進行所需要的功能)
以上定義的方法都是我們會使用到的功能(初步功能),Let’s Boo it !
後面會繼續在完成以上的程式碼來達到使用者帳戶存取、朋友名單、以及建立連線來達到我們所要的通訊功能。
讓我們繼續看下去...