Swift 后台开发 -- 初次体验

上一篇说了基于 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 上调总比在终端上调看着舒服点~~~

Swift 后台开发 -- 初次体验_第1张图片
1065328C-2835-4F01-82F4-B7A31456724A.png

这个主要是由于你本地的 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 里面直接执行,然后在浏览器里查看结果:

Swift 后台开发 -- 初次体验_第2张图片
90748DAF-A429-4F80-9002-73806E8A13E5.png

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

你可能感兴趣的:(Swift 后台开发 -- 初次体验)