zoukankan      html  css  js  c++  java
  • 【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 }

      看看结果:

      

  • 相关阅读:
    前端学PHP之面向对象系列第一篇——类和对象
    前端学PHP之面向对象系列第三篇——三大特性
    mysql之视图
    PHP中冒号、endif、endwhile、endfor这些都是什么
    abap将内表数据导出为excel文件
    调用、跳转到事务码、报表
    <转>sapjco3.dll already loaded in another classloader错误解决办法
    sap权限检查
    <转>DIALOG条件 CHAIN 语句
    ABAP DOI 下载SMW0的EXCEL和WORD模板
  • 原文地址:https://www.cnblogs.com/linxiong945/p/4309245.html
Copyright © 2011-2022 走看看