openresty前端開發入門二
這一章主要介紹介紹怎麼獲取請求引數,並且處理之後返回資料
我們知道http請求通常分為兩種,分別是GET,POST,在http協議中,GET引數通常會緊跟在uri後面,而POST請求引數則包含在請求體中,nginx預設情況下是不會讀取POST請求引數的,最好也不要試圖使改變這種行為,因為大多數情況下,POST請求都是轉到後端去處理,nginx只需要讀取請求uri部分,以及請求頭
由於這樣的設計,所以獲取請求引數的方式也有兩種
GET
local args = ngx.req.get_uri_args() -- 這裡是一個table,包含所有get請求引數
local id = ngx.var.arg_id -- 這裡獲取單個請求引數,但是如果沒有傳遞這個引數,則會報錯,推薦上面那張獲取方式
POST
ngx.req.read_body() -- 先讀取請求體
local args = ngx.req.get_post_args() -- 這裡也是一個table,包含所有post請求引數
可以通過下面這個方法獲取http請求方法
local request_method = ngx.var.request_method -- GET or POST
為了統一獲取請求引數的方式,隱藏具體細節,提供一個更友好的api介面,我們可以簡單的封裝一下
lua/req.lua
local _M = {}
-- 獲取http get/post 請求引數
function _M.getArgs()
local request_method = ngx.var.request_method
local args = ngx.req.get_uri_args()
-- 引數獲取
if "POST" == request_method then
ngx.req.read_body()
local postArgs = ngx.req.get_post_args()
if postArgs then
for k, v in pairs(postArgs) do
args[k] = v
end
end
end
return args
end
return _M
這個模組就實現了引數的獲取,而且支援GET,POST兩種傳參方式,以及引數放在uri,body的post請求,會合並兩種方式提交的引數
接下來我們可以寫一個簡單的lua,來引入這個模組,然後測試一下效果
conf/nginx.conf
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
lua_package_path /Users/Lin/opensource/openresty-web-dev/demo2/lua/?.lua; # 這裡一定要指定package_path,否則會找不到引入的模組,然後會500
server {
listen 80;
server_name localhost;
lua_code_cache off;
location ~ /lua/(.+) {
default_type text/html;
content_by_lua_file lua/$1.lua;
}
}
}
lua/hello.lua
local req = require "req"
local args = req.getArgs()
local name = args[`name`]
if name == nil or name == "" then
name = "guest"
end
ngx.say("<p>hello " .. name .. "!</p>")
測試
http://localhost/lua/hello?name=Lin
輸出 hello Lin!
http://localhost/lua/hello
輸出 hello guest!
ok 到這裡,我們已經能夠根據請求的引數,並且在做一下處理後返回資料了
示例程式碼 參見demo2部分
相關文章
- openresty前端開發入門三之JSON篇REST前端JSON
- openresty前端開發入門四之Redis篇REST前端Redis
- openresty前端開發入門五之Mysql篇REST前端MySql
- openresty前端開發序REST前端
- openresty前端開發進階二之https後端REST前端HTTP後端
- OpenResty入門REST
- 前端開發快速入門前端
- Web 前端開發之小白入門Web前端
- web前端開發怎麼入門?Web前端
- Unity3D開發入門教程(二)—— Lua入門Unity3D
- Android開發者的Flutter入門(二)AndroidFlutter
- Python和前端開發哪個更好入門?Python前端
- Flutter入門教程(二)開發環境搭建Flutter開發環境
- 入門級前端開發可能需要的安利列表前端
- 面向前端開發的python入門圖譜前端Python
- web前端開發教程,最全JavaScript入門講解Web前端JavaScript
- Python屬於後端開發還是前端開發?Python入門!Python後端前端
- CAD二次開發入門:WPF類庫
- Java開發學習(二)----IOC、DI入門案例Java
- 前端開發神器Charles從入門到解除安裝前端
- Docker下的OpenResty三部曲之二:細說開發DockerREST
- openresty前端開發輕量級MVC框架封裝一(控制器篇)REST前端MVC框架封裝
- 來自遠古時代的 Kotlin 前端開發入門Kotlin前端
- 敏捷開發入門敏捷
- Abaqus二次開發入門和進階培訓
- Python開發的入門教程(二)-List和Tuple型別Python型別
- ARM開發環境入門(嵌入式作業二)開發環境
- PHP 開發入門自動化測試歷程(二)PHP
- Web前端開發入門之網頁製作三要素Web前端網頁
- 前端開發入門到實戰:JavaScript字串轉換數字前端JavaScript字串
- Web前端開發入門之網頁製作三要素!Web前端網頁
- gRPC(二)入門:Protobuf入門RPC
- 前端 Typescript 入門前端TypeScript
- 自學前端如何快速入門?怎麼快速入門前端?前端
- OpenResty高併發REST
- 【Android開發入門教程】三.Activity入門指南!Android
- Git入門與開發Git
- 敏捷開發入門教程敏捷