博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
openresty 前端开发入门二
阅读量:5861 次
发布时间:2019-06-19

本文共 1807 字,大约阅读时间需要 6 分钟。

这一章主要介绍介绍怎么获取请求参数,并且处理之后返回数据

我们知道http请求通常分为两种,分别是GET,POST,在http协议中,GET参数通常会紧跟在uri后面,而POST请求参数则包含在请求体中,nginx默认情况下是不会读取POST请求参数的,最好也不要试图使改变这种行为,因为大多数情况下,POST请求都是转到后端去处理,nginx只需要读取请求uri部分,以及请求头

由于这样的设计,所以获取请求参数的方式也有两种

GET

local args = ngx.req.get_uri_args() -- 这里是一个table,包含所有get请求参数local id = ngx.var.arg_id -- 这里获取单个请求参数,但是如果没有传递这个参数,则会报错,推荐上面那张获取方式

POST

ngx.req.read_body() -- 先读取请求体local args = ngx.req.get_post_args() -- 这里也是一个table,包含所有post请求参数

可以通过下面这个方法获取http请求方法

local request_method = ngx.var.request_method -- GET or POST

为了统一获取请求参数的方式,隐藏具体细节,提供一个更友好的api接口,我们可以简单的封装一下

lua/req.lua

local _M = {}-- 获取http get/post 请求参数function _M.getArgs()    local request_method = ngx.var.request_method    local args = ngx.req.get_uri_args()    -- 参数获取    if "POST" == request_method then        ngx.req.read_body()        local postArgs = ngx.req.get_post_args()        if postArgs then            for k, v in pairs(postArgs) do                args[k] = v            end        end    end    return argsendreturn _M

这个模块就实现了参数的获取,而且支持GET,POST两种传参方式,以及参数放在uri,body的post请求,会合并两种方式提交的参数

接下来我们可以写一个简单的lua,来引入这个模块,然后测试一下效果

conf/nginx.conf

worker_processes  1;error_log logs/error.log;events {    worker_connections 1024;}http {    lua_package_path /Users/Lin/opensource/openresty-web-dev/demo2/lua/?.lua;  # 这里一定要指定package_path,否则会找不到引入的模块,然后会500    server {        listen 80;        server_name localhost;        lua_code_cache off;        location ~ /lua/(.+) {            default_type text/html;                content_by_lua_file lua/$1.lua;        }    }}

lua/hello.lua

local req = require "req"local args = req.getArgs()local name = args['name']if name == nil or name == "" then    name = "guest"endngx.say("

hello " .. name .. "!

")

测试

输出 hello Lin!

输出 hello guest!

ok 到这里,我们已经能够根据请求的参数,并且在做一下处理后返回数据了

参见demo2部分

转载地址:http://tygjx.baihongyu.com/

你可能感兴趣的文章
RHCE实验2:RHEL6.0安装过程
查看>>
Centos7搭建SVN+Apache+IF.svnadmin支持https实现web管理SVN
查看>>
tomcat启动流程(2)
查看>>
用cmake生成利用VTK库类的visual studio 2010 MFC工程
查看>>
老博客的文章
查看>>
每次登陆linux总是提示:you hava a new mail
查看>>
要么滚回家里去,要么就拼命
查看>>
α测试,β测试以及λ测试
查看>>
Sublime Text3快速编译php
查看>>
我的友情链接
查看>>
android-menudrawer导入分享
查看>>
emacs里用ebrowse解析已有的c++工程
查看>>
DBUnit数据库测试
查看>>
获取 Maven Java web 项目 Resourse / ClassPath 下的文件 路径
查看>>
为什么你总成为不了架构师?
查看>>
WinRAR命令行参数
查看>>
eclipse添加freemarker插件
查看>>
程序员的简单接口压测
查看>>
我的友情链接
查看>>
移动端多端适配
查看>>