【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 }

  看看结果:

  

时间: 2024-10-26 03:08:21

【openresty】向lua代码中传递参数的相关文章

mfc 在VC的两个对话框类中传递参数的三种方法

弄了好久,今天终于把在VC中的对话框类之间传递参数的问题解决了,很开心,记录如下: 1. 我所建立的工程是一个基于MFC对话框的应用程序,一共有三个对话框,第一个对话框为主对话框,所对应的类为CTMDDDlg类.在主对话框上我放置了一个标签页(Tab Control)控件,其实现的功能是当单击标签提示A时进入页面A,即对话框A(所对应的类为CDialogChild1),单击B时进入对话框B(CDialogChild2). 整个工程的框架已经设计好了,在对话框A和对话框B上放置了许多控件,现在我想

JSF在ui:include中传递参数到对应控制层

在JSF中使用ui:include方法可以引入一个页面到当前页面中,如果要向被包含的页面中传入参数,可以使用ui:param标签,这个标签类似于f:param,只不过一个用于页面,一个用于实际标签.示例代码如下: 1 <ui:include src="a.xhtml"> 2 <ui:param name="id" value="#{bean.id}" /> 3 </ui:include> 此时可以将一个属性名为

JQuery中如何click中传递参数

代码如下: click(data,fn)中的data其实是json对象,取的时候,只能通过当前的事件源来取,data是默认放在event中的,所以这里的data是eventdata,引用的时候也使用event.data.name,也就是说JQuery中的所有触发时间的方法,需要传递参数都可以通过eventdata对象来传递参数

Struct2 向Action中传递参数

就是把视图上的值传递到Action定义的方法中 也就是把数据从前台传递到后台 三种方式: 1.  使用action属性接收参数 比如jsp页面: <body> 使用action属性接收参数<a href="user/user!add?name=a&age=8">添加用户</a> </body> 对应的struct.xml <action name="user" class="com.bjsxt.

在单点登录中传递参数问题

这两天一直忙一个事情,在单点登录运用的过程中因为要传6个参数,get请求每次只能获取第一个参数,post只能正常访问路径,而参数却全部为null. 经历了postman的各种测试,晕头转向,在产品部老哥的一句话让我醍醐灌顶瞬间清醒,为什么不尝试把我们习惯的http请求中多参数传递的拼接符号 "&"尝试转义! 瞬间成功! 这件事让我琢磨了两天,因为一句话而茅塞顿开. 失败的请求方式: http://localhost:8090/gzdbthreeweb/control?pages

python数据库连接之pyMysql -(二):使用变量向SQL语句中传递参数

使用MySQLdb连接数据库执行sql语句时,有以下几种传递参数的方法: 一.通过自定义参数传递: import pymysql import types dbinfo={"host":"192.168.6.41", "user":"lrtsaudio", "password":"2&Ty3DW75i!(vgo.l3Odp1fgWgEG", "db":&quo

分页技术框架(Pager-taglib)学习三(pager-taglib中传递参数时中文乱码问题)

一.问题描述 问题: 使用<pg:param name="key" />标签传递中文参数时,会有乱码. 原因: 因为它默认是用gb2312来对添加的参数进行编码,如果你的过滤器.jsp页面都是采用的gb2312就没有什么问题,如果你采用的是utf-8来编码,那么中文参数传递过程中就会出现乱码导致无法解析.   二.问题解决方法 网上有很多解决办法,重新修改编译源代码是一种方法: 在com\jsptags\navigation\pager下面的PagerTag的addPara

c#中传递参数前加out

首先:两者都是按地址传递的,使用后都将改变原来参数的数值. 其次: rel 可以把参数的数值传递进函数,但是 out 是要把参数清空,就是说你无法把一个数值 从 out 传递进去的, out 进去后,参数的数值为空,所以你必须初始化一次.这个就是两个的区 别,或者说就像有的网友说的, rel 是有进有出, out 是只出不进.

cmd中传递参数运行java程序

1. java主函数 public static void main(String [] args) { } 这里面的args是什么. 这就是程序启动时的初始参数.你可以在启动时传入. 如:java MyClass abc 123 这时 args[0] == "abc"  args[1] == "123" 2. java测试代码   package order; public class TestMain {       public static void mai