上一篇说了基于 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 开发一同搞,有兴趣的可以关注下。