Vapor Web模板和Node's APIs

Web模板和Node's APIs

這里主要介紹web模板伴网。

這里先進(jìn)行介紹Leaf

  • 這里我們使用web模板直接就有l(wèi)eaf
  • 文件樹(shù)如下
Hello
├── Config
│   ├── app.json
│   ├── crypto.json
│   ├── droplet.json
│   ├── fluent.json
│   └── server.json
├── Package.pins
├── Package.swift
├── Public
├── README.md
├── Resources
│   ├── Views
│   │   │   └── hello.leaf
├── Public
│   ├── images (images resources)
│   ├── styles (css resources) 
├── Sources
│   ├── App
│   │   ├── Config+Setup.swift
│   │   ├── Controllers
│   │   │   └── PostController.swift
│   │   ├── Droplet+Setup.swift
│   │   ├── Models
│   │   │   └── Post.swift
│   │   └── Routes.swift
│   └── Run
│       └── main.swift
├── Tests
│   ├── AppTests
│   │   ├── PostControllerTests.swift
│   │   ├── RouteTests.swift
│   │   └── Utilities.swift
│   └── LinuxMain.swift
├── circle.yml
└── license

如果是api模板需要進(jìn)行如下配置

  • Package.swift添加 Leaf-provider
import PackageDescription

let package = Package(
    name: "Helloapi",
    products: [
        .library(name: "App", targets: ["App"]),
        .executable(name: "Run", targets: ["Run"])
    ],
    dependencies: [
        .package(url: "https://github.com/vapor/vapor.git", .upToNextMajor(from: "2.1.0")),
        .package(url: "https://github.com/vapor/fluent-provider.git", .upToNextMajor(from: "1.2.0")),
        .package(url: "https://github.com/vapor/leaf-provider.git", .upToNextMajor(from: "1.1.0")),
    ],
    targets: [
        .target(
            name: "App",
            dependencies: ["Vapor", "FluentProvider", "LeafProvider"],
            exclude: ["Config", "Database", "Public", "Resources"]
        ),
        .target(name: "Run", dependencies: ["App"]),
        .testTarget(name: "AppTests", dependencies: ["App", "Testing"])
    ]
)

  • Config文件夾下droplet添加
    "http://": "The type of view renderer that drop.view will use",
    "http://": "leaf: Pure Swift templating language created for Vapor.",
    "http://": "static: Simply return the view at the supplied path",
    "view": "leaf",
  • 這里需要運(yùn)行添加 LeafProvider

  • Helloapi/Sources/App/Setup文件夾下Config+Setup.swift文件添加LeafProvider

import FluentProvider
import LeafProvider

extension Config {
    public func setup() throws {
        // allow fuzzy conversions for these types
        // (add your own types here)
        Node.fuzzy = [Row.self, JSON.self, Node.self]

        try setupProviders()
        try setupPreparations()
    }
    
    /// Configure providers
    private func setupProviders() throws {
        try addProvider(FluentProvider.Provider.self)
        try addProvider(LeafProvider.Provider.self)
    }
    
    /// Add all models that should have their
    /// schemas prepared before the app boots
    private func setupPreparations() throws {
        preparations.append(Post.self)
    }
}

  • 這里放幾組測(cè)試
  • 代碼 這里web模板里的。
///
    
        GET /hello/...
        builder.resource("hello", HelloController(view))
        
        /// GET /test/str   測(cè)試字符串
        builder.get("test/str") { req in
            let str = "This is test Str"
            return try self.view.make("hello", ["name": str], for: req)
        }
        /// GET /test/array     測(cè)試數(shù)組
        builder.get("test/array") { req in
            let array = ["one", "two", "three"]
            return try self.view.make("hello", ["array": array])
        }
        /// GET /test/dictionary    測(cè)試字典
        builder.get("test/dictionary") { req in
            let arrayModel = [["name":"tom"], ["name":"Tim"], ["name":"LiLei"]]
            return try self.view.make("hello", ["arrayModel": arrayModel])
        }
        /// GET /test/bool      測(cè)試bool類型
        builder.get("test/bool") { req in
            let bool = true
            return try self.view.make("hello", ["bool": bool], for: req)
        }
        
  • hello.leaf文件
#extend("base")

#export("title") { Hello, #(name)! }

#export("content") {
    <h1>Hello, #(name)!</h1>
    <div>
    現(xiàn)在測(cè)試循環(huán)
    #loop(array, "number") {
      #(offset). #(number)
    }
    </div>
    <div>
    現(xiàn)在測(cè)試字典循環(huán)
    #loop(arrayModel, "model") {
      #(offset). #(model.name)
    }
    </div>
}

這里我們現(xiàn)在進(jìn)行介紹Node

  • 我們?cè)谏厦嬉呀?jīng)可以使用Leaf了存哲、但是有時(shí)間基礎(chǔ)的字符串、數(shù)組预柒、字典已經(jīng)不能滿足我們了耸序。我們需要自定義數(shù)據(jù)類型√赐罚可是我們直接寫(xiě)是識(shí)別不了的轰异、所以這里就需要Node來(lái)讓我們leaf文件可以讀取我們自定義的model。

  • 這里也很簡(jiǎn)單鳖擒,我們實(shí)現(xiàn) NodeInitializableNodeRepresentable 協(xié)議就可以了溉浙。

struct Person: NodeInitializable {
    let name: String
    let age: Int

    init(node: Node) throws {
        name = try node.get("name")
        age = try node.get("age")
    }
}

extension Person: NodeRepresentable {
    func makeNode(in context: Context) throws -> Node {
        var node = Node(context)
        try node.set("name", name)
        try node.set("age", age)
        return node
    }
}

  • 當(dāng)然這里也可以轉(zhuǎn)換json數(shù)據(jù)讓html顯示。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蒋荚,一起剝皮案震驚了整個(gè)濱河市戳稽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌期升,老刑警劉巖惊奇,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異播赁,居然都是意外死亡颂郎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)容为,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乓序,“玉大人寺酪,你說(shuō)我怎么就攤上這事√媾” “怎么了寄雀?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)陨献。 經(jīng)常有香客問(wèn)我盒犹,道長(zhǎng),這世上最難降的妖魔是什么眨业? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任急膀,我火速辦了婚禮,結(jié)果婚禮上龄捡,老公的妹妹穿的比我還像新娘卓嫂。我一直安慰自己,他們只是感情好墅茉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布命黔。 她就那樣靜靜地躺著,像睡著了一般就斤。 火紅的嫁衣襯著肌膚如雪悍募。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天洋机,我揣著相機(jī)與錄音坠宴,去河邊找鬼。 笑死绷旗,一個(gè)胖子當(dāng)著我的面吹牛喜鼓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播衔肢,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼庄岖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了角骤?” 一聲冷哼從身側(cè)響起隅忿,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎邦尊,沒(méi)想到半個(gè)月后背桐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蝉揍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年链峭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片又沾。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弊仪,死狀恐怖熙卡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情励饵,我是刑警寧澤再膳,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站曲横,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏不瓶。R本人自食惡果不足惜禾嫉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚊丐。 院中可真熱鬧熙参,春花似錦、人聲如沸麦备。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)凛篙。三九已至黍匾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呛梆,已是汗流浹背锐涯。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留填物,地道東北人纹腌。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像滞磺,于是被迫代替她去往敵國(guó)和親升薯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理击困,服務(wù)發(fā)現(xiàn)涎劈,斷路器,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • 愛(ài)情篇: 青春期的人們會(huì)向往沛励。很正常趟妥,也著實(shí)令人心動(dòng)。瞬間荷爾蒙的分泌讓你對(duì)愛(ài)情諸多憧憬坞生,想象著它的美好英遭,心...
    后面閱讀 292評(píng)論 0 2
  • 早上五點(diǎn)多白筹,天剛蒙蒙亮智末。伴著屋外汽車來(lái)來(lái)回回的飛馳聲和小鳥(niǎo)嘰嘰喳喳的晨曲聲,我醒來(lái)了徒河。 少有的清晨系馆,我醒這么早。似...
    小崔喵喵噠石頭畫(huà)閱讀 3,147評(píng)論 62 57
  • 任何人 帶入場(chǎng)景的一句話 都能讓我想起你 是的 我還想你呢
    茜大妞閱讀 138評(píng)論 0 0
  • 我老了三歲顽照,你依舊站在那里 飯館旁邊的體育館仍舊不讓進(jìn) 柵欄里面的樹(shù)每一年還是會(huì)翻新 我哭了一晚由蘑,你依舊站在那里 ...
    九晃閱讀 251評(píng)論 1 2