上一篇說了基于 vapor 的 Swift 后臺開發的環境搭建,這里先不談基礎,也不說理論,先來實現一個簡單的小功能:獲取用戶信息。這里使用的數據庫是 MySQL,沒有安裝的自己去官網下載安裝就可以了。
注意:vapor MySQL Provider 中支持 Json 格式,所以 MySQL 版本要在 5.7 或者以上,安裝完成后可以順手配置 MySQL 桌面工具什么,習慣在終端操作的直接無視。啟動 MySQL 測試連接是否正常,再順便新建個 Users 表方便后面測試:
create table users (
uid varchar(100),
username varchar(255),
nickname varchar(255),
PRIMARY KEY (uid)
);
insert into users values ('021020', 'deng', 'dengyonghao')
1.首先我們需要添加 MySQL Provider Package:
let package = Package(
name: "IMServer",
dependencies: [
.Package(url: "https://github.com/vapor/vapor.git", majorVersion: 1, minor: 1),
.Package(url: "https://github.com/vapor/mysql-provider.git", majorVersion: 1, minor: 0)
]
)
添加完成后,需要我們手動來更新下依賴包,不要執行 vapor clean 來清空,這樣會把原來的依賴包全部刪除再下載,如果網速比較慢就坑了,比如說我公司的網絡,感覺github被和諧掉沒有什么兩樣~~
swift package update
2.完成后 build 下,添加了mysql provider,需要加上 --mysql,配置 xcode 時也是同理:
vapor build --mysql
vapor xcode --mysql
如果在這里你可以一次 build 成功,只能說你太幸運了,這樣你可以直接跳過第3步看第4步,如果有興趣也可以看下3步,說不定,以后就會用到嗯 _
3.如果在 build 出錯了的話,直接 用 vapor xcode --mysql 進入到 xcode 里面調試,xcode 上調總比在終端上調看著舒服點~~~
這個主要是由于你本地的 MySQL 的相關 Lib 沒有導出去,這個時候我們需要把我們本地的 MySQL 的實際 Lib 的路徑導進到工程里面,如果發現 CMySQL 之類的錯誤,則表示 CMySQL 這個依賴包沒有找到,需要手動去添加頭文件的查找路徑:
HEADER_SEARCH_PATHS = $(SRCROOT)/Packages/CMySQL-1.0.0
LIBRARY_SEARCH_PATHS = /usr/local/mysql-5.7.16-osx10.11-x86_64/lib
這里根據你實際的路徑填寫。
4.在 main.swift 中添加數據庫操作代碼:
import Vapor
import VaporMySQL
let drop = Droplet()
let mysql = try VaporMySQL.Provider(host: "localhost", user: "root", password: "密碼", database: "數據庫名")
drop.addProvider(mysql)
drop.get("userinfo") { req in
let name = req.data["name"]
if name == nil {
return try JSON(node: [
"error" : "error: user name is nil"
])
}
let result = try mysql.driver.mysql("select * from users where username='" + (name?.string)! + "';")
let userinfo = result[0]
return try JSON(node: userinfo)
}
drop.run()
這里就不封裝什么了,實際使用時這里應該對實體類和數據庫操作進行封裝的。
在 xcode 里面直接執行,然后在瀏覽器里查看結果:
5.最后,我們再來分析下為什么步驟2里面會 build 失敗,在 vapor toolbox 里面:
vapor build --mysql
相當于:
swift build -Xswiftc -I/usr/local/include/mysql -Xlinker -L/usr/local/lib
感覺是不是發現了什么, 對的, MySQL 的相關 Lib 沒有鏈接過來,所以我們改下:
swift build -Xswiftc -I/usr/local/include/mysql -Xlinker -L/usr/local/lib -Xlinker -L/usr/local/mysql-5.7.16-osx10.11-x86_64/lib
把相關鏈接加進來我們就可以 build 成功了,看來有時候還是不能太過依賴于 vapor toolbox, 多分析下原因,這個東西我也折騰了挺久才知道原因。。。。
這里還有個沒有解決的問題:
[DEPRECATED] Providers should implement the `boot(_: Droplet)` method to register dependencies. The `provided` property will be removed in a future update.
No command supplied, defaulting to serve...
這個過期聲明要用什么來代替呢,看不太懂,有經驗的求分享下。
最后,這篇文章主要還是體驗下 vapor,想想當初用 SSH 來做信息系統時,各種煩人,初次體驗 vapor 還是不錯的,后面嘗試下能不能通過 vapor 來搭建個 IM 后臺,可以配合SDK 開發一同搞,有興趣的可以關注下。