Swift Perfect 基础项目
- brew install mysql@5.7 && brew link mysql@5.7 --force
- Package.swift
- import PackageDescription
- // ProjectName
- private let kProjectName: String = "ProjectName"
- let package = Package(
- name: kProjectName,
- products: [
- .executable(name: kProjectName, targets: [kProjectName])
- ],
- dependencies: [
- .package(url: "https://github.com/PerfectlySoft/Perfect-HTTPServer.git", from: "3.0.0"),
- .package(url: "https://github.com/PerfectlySoft/Perfect-MySQL.git", from: "3.0.0"),
- .package(url: "https://github.com/PerfectlySoft/Perfect-Logger.git", from: "3.0.0"),
- ],
- targets: [
- .target(name: kProjectName, dependencies: ["PerfectHTTPServer", "PerfectMySQL", "PerfectLogger"])
- ]
- )
- Sources/<ProjectName>/main.swift
- import PerfectLib
- import PerfectHTTP
- import PerfectHTTPServer
- import PerfectLogger
- //MARK: - Log location
- let logPath = "./files/log"
- let logDir = Dir(logPath)
- if !logDir.exists {
- try Dir(logPath).create()
- }
- LogFile.location = "\(logPath)/Server.log"
- // MARK: - Configure routes
- var routes = BasicRoutes().routes
- // MARK: - Configure server
- let server = HTTPServer()
- server.addRoutes(routes)
- server.serverPort =
- server.serverName = "localhost"
- server.setResponseFilters([
- (try PerfectHTTPServer.HTTPFilter.contentCompression(data: [:]), HTTPFilterPriority.high)])
- // MARK: - Start server
- do {
- LogFile.info("Server Start Successful")
- try server.start()
- } catch let error {
- LogFile.error("Failure Start Server:\(error)")
- print("Failure Start Server:\(error)")
- }
- Sources/<ProjectName>/ApiOperation.swift
- import Foundation
- import PerfectLib
- import PerfectHTTP
- import PerfectHTTPServer
- // localhost html
- private let LocalhostHtml: String = "<html><meta charset=\"UTF-8\"><title>Api Server</title><body>接口服务器<br>V0.0.1</body></html>"
- class BasicRoutes {
- var routes: Routes {
- get {
- var baseRoutes = Routes()
- // localhost
- // Configure one server which:
- // * Serves the hello world message at <host>:<port>/
- // * Serves static files out of the "./webroot"
- // directory (which must be located in the current working directory).
- // * Performs content compression on outgoing data when appropriate.
- baseRoutes.add(method: .get, uri: "/", handler: localhostHandler)
- baseRoutes.add(method: .get, uri: "/**", handler: StaticFileHandler(documentRoot: "./webroot", allowResponseFilters: true).handleRequest)
- // Interface version
- baseRoutes.add(method: .get, uri: "/api/v1", handler: apiVersionHandle)
- return baseRoutes
- }
- }
- // MARK: - localhost
- private func localhostHandler(request: HTTPRequest, response: HTTPResponse) {
- // Respond with a simple message.
- response.setHeader(.contentType, value: "text/html")
- response.appendBody(string: LocalhostHtml)
- // Ensure that response.completed() is called when your processing is done.
- response.completed()
- }
- // MARK: - Interface version
- private func apiVersionHandle(request: HTTPRequest, response: HTTPResponse) {
- let successArray: [String: Any] = ["status": , "version": "0.0.1"]
- let jsonStr = try! successArray.jsonEncodedString()
- response.appendBody(string: jsonStr)
- response.completed()
- }
- }
- swift build
- swift package generate-xcodeproj
Mac 配置MySql:(管理工具 Sequel Pro)
- 启动mysql服务
$ mysql.server start
- 初始化mysql配置
$ mysql_secure_installation
- Securing the MySQL server deployment.
- Connecting to MySQL using a blank password.
- VALIDATE PASSWORD PLUGIN can be used to test passwords
- and improve security. It checks the strength of password
- and allows the users to set only those passwords which are
- secure enough. Would you like to setup VALIDATE PASSWORD plugin?
- Press y|Y for Yes, any other key for No: N // 这个选yes的话密码长度就必须要设置为8位以上,但我只想要6位的
- Please set the password for root here.
- New password: // 设置密码
- Re-enter new password: // 再一次确认密码
- By default, a MySQL installation has an anonymous user,
- allowing anyone to log into MySQL without having to have
- a user account created for them. This is intended only for
- testing, and to make the installation go a bit smoother.
- You should remove them before moving into a production
- environment.
- Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y // 移除不用密码的那个账户
- Success.
- Normally, root should only be allowed to connect from
- 'localhost'. This ensures that someone cannot guess at
- the root password from the network.
- Disallow root login remotely? (Press y|Y for Yes, any other key for No) : n //不接受root远程登录账号
- ... skipping.
- By default, MySQL comes with a database named 'test' that
- anyone can access. This is also intended only for testing,
- and should be removed before moving into a production
- environment.
- Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y //删除text数据库
- - Dropping test database...
- Success.
- - Removing privileges on test database...
- Success.
- Reloading the privilege tables will ensure that all changes
- made so far will take effect immediately.
- Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
- Success.
- All done!
Swift Perfect 基础项目的更多相关文章
- Swift语法基础入门四(构造函数, 懒加载)
Swift语法基础入门四(构造函数, 懒加载) 存储属性 具备存储功能, 和OC中普通属性一样 // Swfit要求我们在创建对象时必须给所有的属性初始化 // 如果没办法保证在构造方法中初始化属性, ...
- Objective-C 和 Swift 混编项目的小 Tips(一)
本文主要闲聊一些 Objective-C 和 Swift 混编项目带来的一些潜规则,希望能帮到对此感到疑惑的朋友.下面我们开始进入主题: 命名 官方 Guide 上只是简单叙述(Using Swift ...
- 十款不容错过的Swift iOS开源项目及介绍
1.十款不容错过的Swift iOS开源项目. http://www.csdn.net/article/2014-10-16/2822083-swift-ios-open-source-project ...
- [Swift]基础
[Swift]基础 一, 常用变量 var str = "Hello, playground" //变量 let str1="Hello xmj112288" ...
- ios开发——实战Swift篇&简单项目的实现
学了这么久的swift语法和相关技术,今天忍不住手痒痒就写了一个swift的小项目,这个项目非常简单(只是使用一个UITableView),但是里面的功能却非常有用. 我们要实现的功能是这样的: 程序 ...
- Swift之基础知识
Swift之基础知识 出于对Swift3.0的学习,写下这篇基本语法的笔记.希望能帮助记忆 -0- 这边提供Swift3.0中文教材,资源链接: https://pan.baidu.com/s/1c2 ...
- Swift语法基础入门三(函数, 闭包)
Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: ...
- Swift语法基础入门二(数组, 字典, 字符串)
Swift语法基础入门二(数组, 字典, 字符串) 数组(有序数据的集) *格式 : [] / Int / Array() let 不可变数组 var 可变数组 注意: 不需要改变集合的时候创建不可变 ...
- asp.net core系列 59 Ocelot 构建基础项目示例
一.入门概述 从这篇开始探讨Ocelot,Ocelot是一个.NET API网关,仅适用于.NET Core,用于.NET面向微服务/服务的架构中.当客户端(web站点.ios. app 等)访问we ...
随机推荐
- 时间转换,django的时间设置,re模块简单校验密码和手机号
时间转换和密码,手机的re模块简单校验 import re,time def check_userinfo(request): pwd = request.POST.get("pwd&quo ...
- Play on Words HDU - 1116 (并查集 + 欧拉通路)
Play on Words HDU - 1116 Some of the secret doors contain a very interesting word puzzle. The team o ...
- BFS:HDU2054-A==B?(字符串的比较)
A == B ? Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- U10783 名字被和谐了
U10783 名字被和谐了 题目背景 众所周知,我们称g是a的约数,当且仅当g是正数且a mod g = 0. 众所周知,若g既是a的约数也是b的约数,我们称g是a.b的一个公约数. 众所周知,a.b ...
- 1 - JVM随笔分类(java虚拟机的内存区域分配(一个不断记录和推翻以及再记录的一个过程))
java虚拟机的内存区域分配 在JVM运行时,类加载器ClassLoader在加载到类的字节码后,交由jvm的执行引擎处理, 执行过程中需要空间来存储数据(类似于Cpu及主存),此时的这段空间的分 ...
- SXCPC2018 nucoj2007 和Mengjiji一起攻克难关
problem #include <algorithm> #include <iostream> #include <cstdio> using namespace ...
- 设计模式之序章-UML类图那点事儿
设计模式之序-UML类图那点事儿 序 打14年年底就像写那么一个系列,用于讲设计模式的,代码基于JAVA语言,最早接触设计模式是大一还是大二来着,那时候网上有人给推荐书,其中就有设计模式,当时给我推荐 ...
- ogre3D学习基础17 --- 如何手动创建ogre程序
建立自己的Ogre程序 一直以来都是使用ExampleApplication.h来写程序,现在来看看它到底有什么神奇的地方. 首先,我们新建一个win32空项目 然后配置环境 最后新建define.c ...
- [转载]在Robotium中使用ID
原文地址:在Robotium中使用ID作者:逍遥云翳 在Robotium的API中不提供使用ID的方式. 如果我们想在Robotium中使用ID就需要自己通过ID来找到控件的实例,然后通过Roboti ...
- Feign请求报请求超时
Feign的底层基于Rabbion实现的,一般情况下直接导入feign的依赖,然后调用feignClient去发送请求,报请求超时. application.yml #hystrix的超时时间 hys ...