Swift3.0服務端開發(二) 靜態文件添加、路由配置以及表單提交

今天博客中就來聊一下Perfect框架的靜態文件的添加與訪問路由的配置以及表單的提交。雖然官網上有聊靜態文件的訪問的部分,可是在使用Perfect框架來訪問靜態文件時仍是有些點須要注意的,這些關鍵點在其官方文檔上並未提出。今天咱們要作的事情就是經過瀏覽器訪問靜態文件,而後在靜態文件中使用form表單往指定的路由上進行提交相應的數據。html

 

1、靜態文件的添加與訪問web

一、未使用Xcode管理的Perfect的靜態文件根目錄的配置數據庫

在PHP開發或者Java Web開發中,都有一個根目錄來存儲相應的靜態文件,好比wwwroot, htdoc, webroot等等這些文件。在使用Perfect開發服務器端時,亦是如此,咱們能夠在Source目錄中的main.swift中對靜態文件的根目錄進行配置,下方就是咱們的配置代碼:json

  

配置完成後,若是咱們的項目不是用Xcode進行管理的話,當咱們對Perfect工程進行編譯和運行時,會在相應的模板目錄下建立相應的靜態文件的根目錄(webroot)。以下所示:swift

  

在webroot中咱們添加上相應的靜態文件,咱們就能夠經過Perfect服務進行訪問了,下方是咱們在webroot中添加的index.html的內容,用瀏覽器就能夠訪問了。下方就是咱們比較簡單的index.html中的內容了,固然下方的html簡單的不能在簡單了,以下所示:xcode

  

在訪問上述index.html文件以前,咱們須要將main.swift中添加的路由進行刪除,下方選中的部分就是要刪除的代碼。若是你不刪除下方這段代碼的話,若是你訪問localhost:8181的話,那麼就是下方路由所返回的內容。修改完代碼後,要從新進行編譯運行才生效的,這一點與解釋性語言PHP是不一樣的。瀏覽器

  

通過上述步驟後,咱們就能夠經過訪問localhost:8181來加載咱們的index.html文件了,以下所示:服務器

  

二、Xcode管理下的Perfect的靜態文件目錄閉包

上述步驟是未使用Xcode管理Perfect項目的狀況,webroot文件夾就位於工程目錄下。當咱們的Perfect工程使用Xcode進行管理後,webroot的位置就會被改變。下方就是調用swift的包管理器生成相應的xcodeproj文件:框架

  

若是你的項目目錄中有webroot目錄,也有index.html文件。可是使用xcode進行Perfect項目管理後,就找不到下方這個index.html文件了。也就是webroot的文件目錄變地方了。這一點在官方文檔上是沒有介紹的。

    

經過搜索,咱們能夠找到Xcode管理下的Perfect項目中的webroot目錄,使用Xcode打開Perfect工程,找到Product,而後右鍵單擊,Show In Finder。

  

咱們會看到Xcode管理下的webroot目錄,以下所示。你能夠將靜態文件放到wwwroot中進行訪問。

  

當咱們在此刷新瀏覽器時,就能夠找到相應的index.html.

  

 

2、路由配置

下方這段代碼就是main.swift中的代碼段,首先建立了一個HTTPServer()的對象,而後又建立了一個路由對象,接着又將這個路由對象添加到了服務對象上。具體代碼以下所示:

  

 

1.添加靜態路由路徑

咱們能夠經過調用routes對象的add()方法爲路由添加各類路徑,固然add()有好多重載的方法,不過其功能都是往路由上添加路徑、請求方法或者創立句柄。

  

 

下方咱們添加了一個「/login」的路由路徑,其請求方法是.get的方式。後方的尾隨閉包是對響應的處理。具體代碼以下:

  

從新編譯並運行咱們的Perfect工程,而後訪問localhost:8181/login路徑,會在瀏覽器中看到下方的返回信息。其餘的路由

  

 

二、路由變量

在配置路由時,咱們的路徑中能夠添加路由變量來匹配同一類型的url。下方就是Perfect框架中路由變量的使用。在URL中經過{key}的方式來插入路由變量。下方的uri中中間的{\(valueKey)}就是經過字符串插值的方式插入的路由變量的Key,咱們能夠經過這個key來獲取到相應的路由變量。

  

下方就是咱們訪問上述路徑的結果:

  

 

三、路由通配符

咱們還能夠在URI中使用通配符類匹配路徑,使用*好來匹配通用的路徑。下方就是路由通配符的使用方式:

  

下方就是路由通配符是運行結果:

  

 

4.結尾通配符

下方就是結尾通配符的使用方式,結尾處使用「**」來匹配尾部全部符合規則的uri, 而後經過routeTrailingWildcardKey來獲取通配的內容。

  

訪問結果以下所示:

  

上述這四種路由的優先級爲:路由變量 > 靜態路由 > 通配符路徑 > 結尾通配符。官方文檔上還有若是配置路由表的版本的示例,在此就不作過多贅述了。

 

3、表單提交與Json返回

聊完路由的配置,接下來咱們要聊一下表單的提交與json數據的返回。本部份內容咱們首先使用form表單post提交的方式將數據提交到指定的路由並處理,處理完畢後再講處理的數據經過josn的數據格式返回給客戶端。

一、構建form表單

首先咱們得建立相應的表單提交的代碼,固然代碼比較簡單,就一個from表單。action的地址就是咱們在服務器端配置的路由地址「127.0.0.1:8181/login」,而表單提交的方式是POST。具體以下所示。

  

 

二、獲取form表單參數

下方就是服務器端獲取表單參數的代碼。首先咱們添加了一個「/login」路由,路由的請求方式是.post。首先咱們獲取請求的參數。由於form表單的請求參數名是「userName」和「password」,因此咱們要使用這兩個namerequest對象中獲取相應的值。獲取到值後你能夠查詢數據庫或者其餘一些操做呢。操做完畢後返回相應的json信息。Swift中的字典是能夠調用jsonEncodeString()方法來轉換的,後邊的博客會對部分Perfect框架的源碼進行解析,其中會涉及到如何將字典轉換成json串,在此就不作過多贅述了。

  

 

3.表單提交與結果返回

上面web頁和服務端都已實現完畢,接下來咱們就開始測試了。下方就是相應的form表單與結果返回:

   

 本篇博客就先到這兒,下篇博客仍然會對Perfect框架的相關內容進行介紹。