本章假設您已經知道httpd server如何快速搭建, 而且知道cf的啓動流程與運行流程, 知曉httpd如何建立與啓動.html
-- script/main.lua
local httpd = require "httpd"
local app = httpd:new("app")
app:static("static", 30)
app:listen("0.0.0.0", 8080)
app:run()
複製代碼
咱們利用httpd內置庫快速實現了一套httpd靜態文件server, 其中包括靜態文件目錄指定與端口設置. 而且在啓動server後能夠在看到測試頁面.web
Web路由用於描述資源處處理函數之間的一個映射關係.json
Web路由表用於描述當前做用域下全部路由的一個集合.後端
以下所示:api
/userlogin -> function userlogin(content) ... end
/userinfo -> function userinfo(content) ... end
複製代碼
對於一個服務端開發者來講! 當接受到客戶端的HTTP請求時, 服務端會將請求URL中的PATH進行分割, 而後開始尋找的PATH映射對應的回調處理函數.瀏覽器
當URL映射的回調處理函數被找到時, 將會爲其注入整個http上下文而且根據處理函數的行爲將返回值展示給資源訪問者.緩存
這就是基本的路由雛形.bash
cf的httpd庫利用這種機制, 爲開發者提供了一整套完整的路由註冊方法, 其中包括: 靜態文件路由、API接口路由、USE頁面路由、WebSocket路由.websocket
靜態文件路由咱們在上一章節已經看到過, 其本質是根據須要讀取指定文件而存在的. 這種路由通常有庫編寫者或者框架編寫者實現.app
而API接口路由、USE頁面路由、Websocket路由則通常由開發自行指定, 這些路由通常都用來處理對應的業務邏輯.
下面咱們就開始學習如何在cf中註冊路由.
API接口路由用於快速構建前、後端分離的web開發場景. 它提供了基於http協議提供了基礎的前、後端通信的解決方案, 是目前位置Web領域最爲常見的開發模式.
而做爲前、後端數據溝通的橋樑天然須要指定指定數據交互類型. 目前爲止, API路由的content-type爲"application/json", 數據交互格式僅支持: json.
httpd庫爲開發者提供了app:api
方法用來註冊API路由, 第一個參數是一個字符串類型的資源路徑, 第二個參數則是回調處理方法;
如今讓咱們在main.lua
中, 添加咱們剛剛學習到的api路由:
-- main.lua
local json = require "json"
app:api('/userinfo', function(content)
return json.encode({
code = 200,
user = {
name = "CandyMi",
age = 29,
sex = "男",
}
})
end)
複製代碼
而後打開瀏覽器, 輸入http://localhost:8080/userinfo
. 咱們就能夠看到咱們輸出的接口數據了.
上面的代碼作了什麼?
使用app:api
定了一個查找路徑爲/userinfo
的API路由並定義了一個函數用於描述當前資源被訪問時的行爲. 路由函數會由httpd庫傳入了一個http context表, 它包含: method、path、body、file、args、headers等一系列屬性. 開發人員能夠根據這些屬性用於執行不一樣行爲.
USE路由與API路由相似. 不過USE路由的content-type類型爲"text/html", 通常用做服務端渲染靜態頁面到瀏覽器.
如今讓咱們編寫一段簡單html代碼並註冊一個USE路由展現給用戶觀看:
app:use('/index', function (content)
return [[ <html> <head> <title>簡陋的頁面</title> </head> <body> <h1 align="center">簡陋的首頁<h1> </body> </html> ]]
end)
複製代碼
讓咱們再次打開瀏覽器, 輸入http://localhost:8080/index
. 這樣就能夠看到剛剛咱們編寫的頁面了.
app:static
方法的第一個參數是一個文件夾字符串, 用於告訴httpd應該如何肯定文件查找路徑; 第二個參數是一個可選的整形數字, 用於告訴客戶端文件緩存週期.
咱們在前面的代碼中已經指定了app
目錄下的static
文件夾爲靜態文件目錄. 這裏就再也不贅述. 直接打開瀏覽器輸入:http://localhost:8080/index.html
再次查看效果.
app:ws
方法爲用戶提供將http協議升級爲Websocket交互協議(http over Websocket), 使用ws方法註冊的路由稱爲Websocket路由.
Websocket路由處理方法這裏不作詳細贅述, 後面會有一個章節專門與你們討論Websocket路由的運用.
local httpd = require "httpd"
local app = httpd:new("app")
local json = require "json"
app:api('/userinfo', function(content)
return json.encode({
code = 200,
user = {
name = "CandyMi",
age = 29,
sex = "男"
}})
end)
app:use('/index', function (content)
return [[ <html> <head> <title>簡陋的頁面</title> </head> <body> <h1 align="center">簡陋的首頁<h1> </body> </html> ]]
end)
app:static("static", 30)
app:listen("0.0.0.0", 8080)
app:run()
複製代碼
下一章咱們一塊兒詳細學習httpd的庫