摘要:使用創(chuàng)建應(yīng)用程序生成一個(gè)新項(xiàng)目如果您尚未閱讀,請(qǐng)閱讀入門(mén)指南,了解有關(guān)創(chuàng)建新項(xiàng)目骨架的信息以及,配置和命令的詳細(xì)信息。是包含應(yīng)用程序的常規(guī)模塊。
使用Lua創(chuàng)建Lapis應(yīng)用程序 生成一個(gè)新項(xiàng)目
如果您尚未閱讀,請(qǐng)閱讀入門(mén)指南,了解有關(guān)創(chuàng)建新項(xiàng)目骨架的信息以及OpenResty,Nginx配置和lapis命令的詳細(xì)信息。
您可以在當(dāng)前目錄中通過(guò)運(yùn)行以下命令啟動(dòng)一個(gè)新的Lua項(xiàng)目:
lapis new --lua
默認(rèn)的 nginx.conf 為應(yīng)用程序讀取一個(gè)名為 app.lua 的文件。lapis new 提供了一個(gè)最基本的結(jié)構(gòu)。
app.lua 是包含應(yīng)用程序的常規(guī) Lua 模塊。你甚至可以像普通 Lua 解釋器中的任何其他模塊一樣加載該模塊。它看起來(lái)像這樣:
-- app.lua local lapis = require("lapis") local app = lapis.Application() app:get("/", function() return "Welcome to Lapis " .. require("lapis.version") end) return app
啟動(dòng)服務(wù)器
lapis server
訪問(wèn)http://localhost:8080以查看該頁(yè)面
如果要更改端口,我們可以創(chuàng)建一個(gè)配置。新建config.lua文件。
在本例中,我們將開(kāi)發(fā)環(huán)境中的端口更改為9090:
-- config.lua local config = require("lapis.config") config("development", { port = 9090 })
您可以在[配置和環(huán)境指南]()中閱讀有關(guān)配置的更多信息。
當(dāng)運(yùn)行 lapis server 而沒(méi)有其他參數(shù)時(shí),會(huì)自動(dòng)使用和加載development環(huán)境。 (而且文件lapis_environment.lua不存在)
Lapis 在配置中使用少量的字段(如 port ),其他字段可以用來(lái)存儲(chǔ)任何你想要的。例如:
-- config.lua local config = require("lapis.config") config("development", { greeting = "Hello world" })
您可以通過(guò)調(diào)用 get 獲取當(dāng)前配置。它返回一個(gè)簡(jiǎn)單的 Lua 表:
-- app.lua local lapis = require("lapis") local config = require("lapis.config").get() local app = lapis.Application() app:get("/", function(self) return config.greeting .. " from port " .. config.port end) return app創(chuàng)建view
現(xiàn)在我們可以創(chuàng)建基本的頁(yè)面,我們可能會(huì)想要一些更復(fù)雜的東西。 Lapis 支持etlua,一種 Lua 模板語(yǔ)言,允許您在 html 和 文本中插入 Lua 代碼
視圖是負(fù)責(zé)生成 HTML 的文件。通常,您的操作將準(zhǔn)備視圖的所有數(shù)據(jù),然后指示它進(jìn)行渲染。
默認(rèn)情況下,Lapis 在 views/ 目錄中搜索視圖。讓我們?cè)谀抢飫?chuàng)建一個(gè)新的視圖文件index.etlua。我們不會(huì)使用任何 etlua 的特殊標(biāo)記,所以它看起來(lái)像一個(gè)正常的HTML文件。
Hello world
Welcome to my page
你會(huì)注意到,,
和標(biāo)簽不在那里。視圖通常呈現(xiàn)頁(yè)面的內(nèi)部,并且布局負(fù)責(zé)其周圍的東西。我們將進(jìn)一步看看布局。現(xiàn)在讓我們創(chuàng)建呈現(xiàn)我們的視圖的應(yīng)用程序:
-- app.lua local lapis = require("lapis") local app = lapis.Application() app:enable("etlua") app:get("/", function(self) return { render = "index" } end) return app
etlua 在默認(rèn)情況下不啟用,您必須通過(guò)調(diào)用應(yīng)用程序?qū)嵗系?enable 方法來(lái)啟用它。
我們使用返回值的 render 參數(shù)來(lái)指示在呈現(xiàn)頁(yè)面時(shí)要使用的模板。在這種情況下,index 是指名為 views.index 的模塊。 etalua 將自己注入到 Lua的require 方法中,因此當(dāng)模塊 views.index 被加載時(shí),會(huì)嘗試讀取和解析文件views/index.etlua 。
運(yùn)行服務(wù)器并在瀏覽器中導(dǎo)航到它應(yīng)該可以顯示出我們渲染的模板。
使用etluaetlua 提供了以下標(biāo)簽用于將 Lua 代碼注入到模板中:
<%lua_code%> 運(yùn)行的Lua代碼塊 <%= lua_expression%> 將表達(dá)式的結(jié)果寫(xiě)入輸出,HTML轉(zhuǎn)義 <%- lua_expression%> 同上,但沒(méi)有HTML轉(zhuǎn)義
在 [etlua指南]() 中了解有關(guān) etlua 集成的更多信息。
在下面的示例中,我們?cè)诓僮髦蟹峙湟恍?shù)據(jù),然后在我們的視圖中打印出來(lái):
-- app.lua local lapis = require("lapis") local app = lapis.Application() app:enable("etlua") app:get("/", function(self) self.my_favorite_things = { "Cats", "Horses", "Skateboards" } return { render = "list" } end) return app
創(chuàng)建布局Here are my favorite things
<% for i, thing in pairs(my_favorite_things) do %>
- <%= thing %>
<% end %>
布局是一個(gè)多帶帶的共享模板,每個(gè)頁(yè)面都包含的內(nèi)容。 Lapis 有一個(gè)基本的布局讓你使用,但你很可能想替換它的東西而自定義。
我們將在 etlua 中編寫(xiě)布局,就像我們的視圖。創(chuàng)建 view/layout.etlua:
<%= page_title or "My Page" %> Greetings
<% content_for("inner") %>
content_for 函數(shù)是模板中內(nèi)置的特殊函數(shù),它允許您 將數(shù)據(jù)從視圖發(fā)送到布局。 Lapis 將視圖的渲染結(jié)果放入名為 inner 的內(nèi)容變量。你會(huì)注意到,我們不需要使用任何寫(xiě)入頁(yè)面的 etlua 標(biāo)簽。這是因?yàn)?content_for 有效地將其結(jié)果直接放入輸出緩沖區(qū)。
通常在視圖中可用的任何其他變量和幫助函數(shù)也可在布局中使用。
現(xiàn)在布局被編寫(xiě),它可以被分配給應(yīng)用程序:
local app = lapis.Application() app:enable("etlua") app.layout = require "views.layout" -- the rest of the application...
語(yǔ)法與渲染視圖略有不同。不是為 layout 字段分配模板名稱,而是分配實(shí)際的模板對(duì)象。這可以通過(guò)引入 views.layout 獲得。如上所述,etlua 負(fù)責(zé)將 .etlua 文件轉(zhuǎn)換為L(zhǎng)ua可用的東西。
下一個(gè)請(qǐng)閱讀[請(qǐng)求和操作]()指南,了解 Lapis 如何路由 HTTP 請(qǐng)求,并讓您對(duì)其進(jìn)行響應(yīng)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/39469.html
摘要:入門(mén)是為和編寫(xiě)的框架。使用來(lái)安裝創(chuàng)建一個(gè)應(yīng)用命令行工具附帶了一個(gè)命令行工具,可幫助您創(chuàng)建新項(xiàng)目和啟動(dòng)服務(wù)器。在生產(chǎn)環(huán)境中,應(yīng)當(dāng)啟用緩存以獲得最佳性能。指令指定一個(gè)代碼塊,它將處理與其他不匹配的任何請(qǐng)求。將忽略常規(guī)的二進(jìn)制文件。 lapis入門(mén) Lapis 是為 Lua 和 MoonScript 編寫(xiě)的 Web 框架。 Lapis 很有趣,因?yàn)樗⒃贜ginx 發(fā)行的 OpenRest...
摘要:配置及環(huán)境被設(shè)計(jì)于依據(jù)不同環(huán)境載入不同的配置來(lái)運(yùn)行服務(wù)器。環(huán)境名稱僅影響加載的配置。例如,這里有一個(gè)的配置塊編譯時(shí),首先檢查環(huán)境變量。默認(rèn)日志記錄位置設(shè)置為,在默認(rèn)的配置中指定。 配置及環(huán)境 Lapis 被設(shè)計(jì)于依據(jù)不同環(huán)境載入不同的配置來(lái)運(yùn)行服務(wù)器。例如,可能您開(kāi)發(fā)環(huán)境的配置設(shè)置為本地?cái)?shù)據(jù)庫(kù)的URL,禁用代碼緩存和單個(gè)worker。然后,您生產(chǎn)環(huán)境的配置可能設(shè)定為遠(yuǎn)程數(shù)據(jù)庫(kù)的 URL...
摘要:的異常處理錯(cuò)誤的種類區(qū)分兩種錯(cuò)誤可恢復(fù)和不可恢復(fù)錯(cuò)誤。捕獲可恢復(fù)的錯(cuò)誤幫助程序用于包裝一個(gè)操作,以便它可以捕獲錯(cuò)誤并運(yùn)行錯(cuò)誤處理程序。相反,使用協(xié)同程序創(chuàng)建一個(gè)異常處理系統(tǒng)。 lapis的異常處理 錯(cuò)誤的種類 Lapis 區(qū)分兩種錯(cuò)誤:可恢復(fù)和不可恢復(fù)錯(cuò)誤。 Lua 的運(yùn)行時(shí)在執(zhí)行期間拋出的錯(cuò)誤或調(diào)用錯(cuò)誤被認(rèn)為是不可恢復(fù)的。 (這也包括 Lua 內(nèi)置函數(shù) assert ) 因?yàn)椴豢苫謴?fù)...
摘要:處理函數(shù)的返回值用于渲染輸出。例如,如果不滿足某些條件,我們可以取消操作并重定向到另一個(gè)頁(yè)面是處理一個(gè)常規(guī)動(dòng)作的返回值,所以同樣的事情你可以返回一個(gè)動(dòng)作,可以傳遞給請(qǐng)求對(duì)象每個(gè)操作在調(diào)用時(shí)會(huì)請(qǐng)求對(duì)象作為其第一個(gè)參數(shù)傳遞。 lapis請(qǐng)求處理 每個(gè)被Lapis處理的HTTP請(qǐng)求在被Nginx處理后都遵循相同的基本流程。第一步是路由。路由是 url 必須匹配的模式。當(dāng)你定義一個(gè)路由時(shí),你也...
摘要:配置語(yǔ)法配置示例的配置模塊提供了對(duì)遞歸合并的支持。例如,我們可以定義一個(gè)基本配置,然后覆蓋更多具體的配置聲明中的一些值這將產(chǎn)生以下兩個(gè)配置結(jié)果默認(rèn)值省略您可以在相同的配置名稱上調(diào)用函數(shù)多次,每次將傳入的表合并到配置中。 Lua 配置語(yǔ)法 配置示例 Lapis 的配置模塊提供了對(duì)遞歸合并 table 的支持。 例如,我們可以定義一個(gè)基本配置,然后覆蓋更多具體的配置聲明中的一些值: --...
閱讀 2733·2023-04-25 14:21
閱讀 1167·2021-11-23 09:51
閱讀 4001·2021-09-22 15:43
閱讀 606·2019-08-30 15:55
閱讀 1550·2019-08-29 11:28
閱讀 2439·2019-08-26 11:44
閱讀 1675·2019-08-23 18:15
閱讀 2875·2019-08-23 16:42