openresty及lor入門教程

一、開發環境準備

1、openresty安裝

下載openresty-1.13.6.1-win32.zip,解壓到本地任一目錄
在這裏插入圖片描述

2、eclipse安裝lua插件

eclipse–>help–>eclipse marketplace–>輸入lua,只能查到一個,下載並安裝
在這裏插入圖片描述
在這裏插入圖片描述

3、環境配置說明

打開openresty的目錄,找到conf文件夾下的nginx.conf
在這裏插入圖片描述
找到http下的server部分,listen對應的是端口號,可以修改。
增加 include 語句,引入分配置文件,對應的是自己lua項目中的配置文件,以後只需要對應自己工程中修改,不需要在改openresty中的conf配置文件。
注:該路徑要寫絕對路徑。
在這裏插入圖片描述
雙擊openresty目錄下的nginx.exe可以啓動openresty。
在這裏插入圖片描述
在cmd中用命令tasklist /fi "imagename eq nginx.exe可以看是否啓動成功。
在這裏插入圖片描述
上面的情況就代表啓動成功。
關閉openresty可以用命令taskkill /pid 3128 /F 啓動成功後,可以在瀏覽器中訪問到openresty的默認頁面。localhost:8077(上面nginx.conf中配置的端口號)
在這裏插入圖片描述
openresty環境裝成功後,繼續編寫分配置文件中的conf文件,也就是include中對應的配置文件。

  1. Eclipse中新建一個lua項目,可以建一個文件夾放對應的配置文件。

在這裏插入圖片描述

  1. 從上圖看出dev.conf是nginx中配置文件引入的分配置文件地址,這個配置文件中,只有一個端口號,還有一個是lua文件的入口,也需要用絕對路徑。Lua入口文件的地址要用lua_package_path引入。

在這裏插入圖片描述

  1. Main.lua中只是簡單的寫了一句hello world,重啓openresty服務。出現以下頁面,則調用lua腳本成功。
    在這裏插入圖片描述

二、Lor框架基本使用

Lor是一個運行在OpenResty上的使用Lua編寫的Web框架。
具體資料見:http://lor.sumory.com/guide/
以下介紹以lor_demo工程爲例,下面是lor_demo工程目錄結構圖。

在這裏插入圖片描述

1、分配置文件dev.conf介紹

nginx的conf要引入該路徑,下面對配置文件中的逐一解釋:
在這裏插入圖片描述

  1. 第4行是lua_package_path是引入lua文件的路徑,主要包括兩部分,app下面是自己的業務邏輯用到的,lualib是lua中常用的一些架包。配絕對路徑 。
  2. 第5行是lua_package_cpath是引入c的文件的寫法,沒有可以不寫 。
  3. 第10行listen的是工程啓動後訪問的端口號 。
  4. 第11-15行是對應前端工程的對應配置,其中root 後面是前端對應的文件夾地址,index是對應目錄下,前端頁面的入口地址。配絕對路徑。
    按上面的配置localhost:8080/index.html即可訪問對應的前端
  5. 第20行是引入lua入口文件的地址。配絕對路徑
  6. 第6-8行及22-29行是對應於springboot服務工程的相關配置,上下文及對應ip的配置config文件中主要是放一些配置項,如登錄白名單,mysql,redis,調用其它服務的路徑等等。

2、main入口文件介紹

首先說明, require加載了對應的模塊。可以理解爲引入對應的包或者類,重點關注以下幾句:

local lor = require("lor.index")
local app = lor()
local router = require("router")
local check_login = require("filter.check_login")
app:use(check_login(whitelist))
router(app)
app:run()

上面是lor框架的最簡單加載過程,初始化一個app,也就是lor(),然後調用app裏面的函數,router是一個路由,user後的check_login是一個攔截,最後run運行。

3、router文件介紹

local xs_router = require("k12.action.xs_action")
app:use("/xxkj/xs", xs_router())

該文件主要配置訪問接口的路徑的前綴部分,具體的router中再對應實現接口。

4、action文件夾介紹

放具體的接口路徑,出入參的驗證等處理。
先申明一個router: local xsxx_router = lor:Router()

  1. 定義get接口
xsxx_router:get("/xsxq", function(req, res, next)      
	#業務邏輯
end) 
  1. 定義post接口
xsxx_router:post("/scxs", function(req, res, next)    	
	#業務邏輯
end)    

前半部分是路徑,和前面router文件中的前半部分拼起來是全路徑。 function中可以處理出入參,req可以取到入參相關,res可以定義出參相關。
常用到req.body, req.query, res:json

5、service文件夾介紹

供action調用,處理具體的業務邏輯,如調用外部接口等。
介紹兩種調用外部接口方式 :

  1. 用工具類使用全路徑調用
local result=httpUtil:get(url.."/xs/cxxslb"..param)
local result=httpUtil:post(url.."/xs/scxs",cjson.encode(post_param)) 
  1. 用ngx的原生方法調用,這個時候用分配置文件中的相對路徑調用
  • 調單個接口
local result=ngx.location.capture("/xs/xsxq?id="..id)
  • 同時調多個接口
local res1,res2=ngx.location.capture_multi({{"/xs/xsxq?id="..xsid},{"/bj/bjxq?id="..bjid}})

6、filter文件夾介紹

主要寫登錄攔截的相關邏輯,可以暫時不關注。

7、綜述

按照上面編寫完接口後,可以根據分配置文件中的端口號,router文件中的路徑前綴,action文件中的路徑及接口類型(get/post)去訪問調試接口了http://localhost:8080/xxkj/xs/xsxq?id=1100000000000000019
在這裏插入圖片描述

三、補充

1、調式

openresty不能單步執行,調式的時候,只能看log下的error.log文件中的日誌。
在這裏插入圖片描述

2、代碼中調式

一般寫log語句查看對應的變量。

ngx.log(ngx.ERR, cjson.encode(req.body))
ngx.log(ngx.ERR,"error")

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章