Nginx+Lua(OpenResty)搭建以及成果测试(3)!

——这次分享一下模拟带Body的POST请求,然后利用Lua脚本解析参数数据。

1、curl 模拟POST命令

curl http://localhost/luatest -H "Content-Type:application/json"  -d '{"user":"me","id":"5"}'
# -H "Content-Type:application/json" 大概意思就是以json格式传输
# -d '{"user":"me","id":"5"}'        要传输的字段/参数

2、编写Lua脚本

local cjson = require "cjson"                   #后面要用到cjson库
if "POST" == request_method then
          ngx.say("This is POST Have Body")

          ngx.req.read_body()                   #开启获取body体中的内容
          local test = ngx.req.get_body_data()  #定义test 接收body内容
          ngx.say("test type: ",type(test))                   #判断test类型
          ngx.say("test is: ",test)                         #打印输出test
  
          ngx.say("after parsing json:")        #使用json解析之后的数据
          local requst = cjson.decode(test)     #定义requst 接收解析后的数据,decode函数作用就是解析。
          ngx.say("requst type: ",type(requst))                 #判断解析后requst的类型
          
          for key,val in pairs(requst) do       #循环遍历requst,打印requst内容
              ngx.say("key:",key,",val:",val)
              end
          
          ngx.say(requst["user"])               #单独打印key对应的val值
          ngx.say(requst["id"])                 #单独打印key对应的val值
end
ngx.say("Test End")

3、分析日志

#打印的日志,每一句打印都与Lua脚本中的语句对应
This is POST Have Body
test type :string                #test 类型为string
test is: {"user":"me","id":"5"}
#--------------------------------分界线
after parsing json:
requst type :table                #requst类型为table

key:id, val:5                     #for循环遍历出的值
key:user, val:me
me                              #通过requst["user"] 方式访问
5                               #通过requst["id"] 方式访问
Test End                        

4、总结

——通过lua脚本打印出的日志可以看到,当发送带Boay的POST请求以后,nginx通过ngx.req.get_body_data()函数接收body体里面的内容,但是通过打印test发现,接收到的test为String类型,也就是日志中的{"user":"me","id":"5"},但由于String不便于解析,所以之后通过cjson.decode()函数将test转换为requst,打印发现requst为Table类型,所以使用for循环来遍历输出table里面的内容,同时也可以使用requst["key"]这种方式,来访问table里面对应的val值;

——END

上一篇:Js链式调用


下一篇:javaScript 基础知识汇总 (十五)