前面介紹FormInputNginxModule模塊時,明白了openresty如何獲取post提交的數據。html
而後,若是須要經過lua處理這些數據,須要把數據做爲參數傳遞到lua中,lua獲取了這些數據,又會將結果返回到nginx內,從而完成整個流程。nginx
首先,有post請求:json
1 var json = { 2 data: "Hello!" 3 }; 4 $.post( 5 'save', 6 json, 7 function(callback){ 8 alert(callback); 9 } 10 );
而後是nginx的相關配置:post
1 user root; 2 worker_processes 2; 3 4 error_log logs/error.log; 5 pid logs/nginx.pid; 6 7 events { 8 worker_connections 1024; 9 # multi_accept on; 10 } 11 12 http { 13 include mime.types; 14 15 access_log logs/access.log; 16 17 server { 18 listen 80; 19 server_name localhost; 20 21 location / { 22 root /var/www/aceEditor; 23 index index.htm index.html; 24 } 25 26 location /save { 27 set_form_input $data data; 28 echo $data; 29 } 30 } 31 }
在介紹FormInputNginxModule模塊時,咱們看到這個配置經過set_form_input方法獲取了post提交的data數據,併成功的將結果返回給了前臺。lua
如今,須要處理post上來的data數據,因此咱們將data做爲一個參數,傳遞到lua代碼中,經過lua代碼來處理這些數據,而且須要將結果返回給nginx。spa
這裏,更改nginx.conf的26~29行的配置:rest
1 location /save { 2 set_form_input $data data; 3 set_by_lua $re ' 4 local s = "張!!!" 5 return ngx.arg[1] .. s; 6 ' $data; 7 echo $re; 8 }
其中,set_by_lua方法:code
語法:set_by_lua $res <lua-script-str> [$arg1 $arg2 ...]orm
做用:將參數列表傳遞到lua內,而且將lua的返回值賦值給res變量。server
在這裏,set_by_lua方法將data做爲參數傳遞到了lua代碼內,在lua內經過ngx.arg[n]獲取了這個參數,通過處理後將結果返回給了nginx,而後該結果賦值給了變量re,nginx再將re返回給了前臺。ngx.arg[n]內的n表示傳遞參數的順序。
看看效果:
咱們看到,前臺正確的獲取了nginx傳遞來的經過lua處理的結果數據。
若是須要將lua代碼獨立出來,則能夠使用set_by_lua_file方法。
因而有lua文件m.lua:
1 local s = "張!asdsd!!" 2 return ngx.arg[1] .. s;
再將上面的配置更改成:
1 location /save { 2 set_form_input $data data; 3 set_by_lua_file $re /var/www/aceEditor/m.lua $data; 4 echo $re; 5 }
看看結果: