Vapor網絡框架的代碼設計模式是遵循MVC的,新建文件的時候,你需要把它放進對應的文件夾,不然 vapor build
的時候會提示錯誤,看它的代碼文件結構:
// M
.
├── App
. └── Models
. └── User.swift
// V
.
├── App
└── Resources
└── Views
└── user.html
// C
.
├── App
. └── Controllers
. └── UserController.swift
Model
新建的數據模型類需要繼承自 Fluent
框架里面的 Model
類,一方面是方便 JSON
數據的轉化,另一方面是方便與數據庫連接操作。
繼承自 Model
的類需要注意以下幾點:
- 必須添加一個
id
成員變量:var id:Node?
- 必須實現以下2個方法:
init(node: Node, in context: Context)
func makeNode(context: Context)
- 必須實現協議
Preparation
里面的2個方法,是用于做數據庫操作的,如果不需進行數據庫操作,直接空實現就可以了:func prepare(_ database: Database)
func revert(_ database: Database)
View
視圖文件存放在文件夾 Resources
的 View
子文件夾內,它可以是 html
文件,也可以是標簽型語言的文件,模板項目里面的視圖文件則是 leaf
后綴的。
視圖文件寫好之后,則可以通過 drop.view.make()
函數訪問,例如:
drop.get("html") { request in
return try drop.view.make("index.html")
}
Controller
控制器主要是方便代碼解耦,把不同的業務邏輯放到不同的控制器里面。
一個簡單的控制器可以像下面那樣:
final class HelloController {
func sayHello(_ req: Request) throws -> ResponseRepresentable {
guard let name = req.data["name"] else {
throw Abort.badRequest
}
return "Hello, \(name)"
}
}
然后在 main.swift
聲明以上控制器方法:
let hc = HelloController();
drop.get("hello", hc.sayHello);
這樣運行項目就可以通過 http://{host}/hello
訪問到 sayHello
方法了。