【openresty】向lua代碼中傳遞參數


  前面介紹FormInputNginxModule模塊時,明白了openresty如何獲取post提交的數據。

  然后,如果需要通過lua處理這些數據,需要把數據作為參數傳遞到lua中,lua獲取了這些數據,又會將結果返回到nginx內,從而完成整個流程。


  首先,有post請求:

 1 var json = {
 2     data: "Hello!"
 3 };
 4 $.post(
 5     'save', 
 6     json, 
 7     function(callback){
 8         alert(callback);
 9     }
10 );

  然后是nginx的相關配置:

 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數據,並成功的將結果返回給了前台。

  現在,需要處理post上來的data數據,所以我們將data作為一個參數,傳遞到lua代碼中,通過lua代碼來處理這些數據,並且需要將結果返回給nginx。

  這里,更改nginx.conf的26~29行的配置:

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方法:

  語法:set_by_lua $res <lua-script-str> [$arg1 $arg2 ...]

  作用:將參數列表傳遞到lua內,並且將lua的返回值賦值給res變量。

  在這里,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 }

  看看結果:

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM