`
qq362228416
  • 浏览: 33042 次
社区版块
存档分类
最新评论

openresty 前端开发入门二

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

我们知道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 args
end

return _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"
end

ngx.say("<p>hello " .. name .. "!</p>")

```

测试

http://localhost/lua/hello?name=Lin
输出 hello Lin!
http://localhost/lua/hello

输出 hello guest!

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

[示例代码](https://github.com/362228416/openresty-web-dev)  参见demo2部分
分享到:
评论

相关推荐

    openresty-web-dev:openresty网站演示

    openresty 前端开发进阶三之后端整合二 openresty 前端开发进阶四之session篇 openresty 前端开发进阶六之websocket篇 openresty 前端开发高级应用一之性能优化 openresty 前端开发高级应用一之动态追踪技术 ...

    openresty官方学习资料

    首先,我们来看《OpenResty 入门到精通》。这本书主要介绍了OpenResty的基础概念和使用方法,包括如何安装和配置OpenResty环境,理解OpenResty的架构设计,以及如何编写基本的Lua脚本来处理HTTP请求。读者会学习到...

    openresty 入门

    OpenResty 的优势在于其高性能和灵活性,能够满足快速开发以及高性能需求的应用场景。本篇内容将围绕 OpenResty 入门和最佳实践进行详细讲解。 首先,对于想要入门 OpenResty 的初学者来说,了解 Lua 语言是必须的...

    openresty(nginx-lua-module-zh-wiki)中文文档.pdf

    OpenResty 是一个强大的 Web 应用服务器,Web 开发人员可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,更主要的是在性能方面,OpenResty可以 快速构造出足以胜任 10K 以上并发连接响应的超高性能 Web ...

    OpenResty最佳实践

    OpenResty是一套基于Nginx和LuaJIT的高性能Web平台,它将Lua语言和Nginx模块化设计的优点...它为那些对Web前端开发、网关开发以及限流代理服务器开发感兴趣的读者提供了宝贵的指导,同时也为OpenResty社区做出了贡献。

    openresty 最佳实践

    Lua的环境搭建、基础数据类型、表达式控制结构、函数定义、模块化编程等都是开发OpenResty应用时需要熟练掌握的知识点。 在开发OpenResty应用时,首先要了解其基础概念,包括location匹配规则、日志记录、反向代理...

    OpenResty开发最佳实践pdf

    通过揉和众多设计良好的 Nginx 模块,OpenResty 有效地把 Nginx 服务器转变为一个强大的 Web 应用服务器,基于它开发人员可以使用 Lua 编程语言对 Nginx 核心以及现有的各种 Nginx C 模块进行脚本编程,构建出可以...

    openresty实践

    在OpenResty中,Lua环境的搭建是入门的基础,包括了对Lua基础语法的学习,如数据类型、表达式、控制结构、函数定义、模块化编程等。这要求开发者熟悉Lua语言的核心特性,比如它的基本数据类型(字符串、数字、布尔值...

    ProxyGatewayPGW基于openresty开发可以作为接口网关使用

    PGW(Proxy Gateway) Proxy Gateway基于openresty(nginx-lua-module)开发,可以作为接口网关(api gateway)使用,整合业务模块接口,微服务治理聚合,通过web配置界面,能够轻松进行代理配置管理,支持负载均衡...

    KONG OPENRESTY.pdf

    * 更好的敏捷性:微服务架构可以使得开发团队更加敏捷和高效。 * 更好的 isolation:微服务架构可以使得每个微服务都可以独立维护和部署。 微服务架构的缺点包括: * 复杂的基础设施:微服务架构需要复杂的基础...

    Openresty二进制版本(openresty-1.19.9.1-win32.zip)

    `openresty-1.19.9.1-win32.zip`是针对Windows 32位系统的OpenResty二进制版本,包含了运行OpenResty所需的所有组件。 1. **OpenResty核心组件**: - **Nginx**:OpenResty基于Nginx,一个高效的反向代理服务器和...

    《OpenResty最佳实践》 .pdf

    《OpenResty最佳实践》这本书籍,旨在向读者介绍OpenResty的使用方法和最佳实践,从而让读者能够充分利用OpenResty进行高效、安全的Web开发。 书籍涵盖了多个知识点,从最基础的Lua脚本语言学习,到OpenResty的高级...

    OpenResty1.25版本安装包

    总之,OpenResty 1.25.3.1是一个强大的Web开发框架,它融合了Nginx的高性能和Lua的灵活性,为构建高性能、高并发的Web应用提供了理想平台。通过深入了解和熟练使用OpenResty,开发者可以实现高效、可扩展的服务架构...

    第一章 安装OpenResty(Nginx+Lua)开发环境

    2. **下载OpenResty源码**: 你可以从OpenResty的官方网站(https://openresty.org/en/download.html)获取最新的源码包。下载完成后,解压到一个合适的目录。 3. **编译安装**: 进入源码目录,运行配置脚本并...

    OpenResty(openresty-1.21.4.1.tar.gz)

    OpenResty通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的...

    openresty-1.25.3.1源码

    二、LuaJIT 在 OpenResty 中的作用 LuaJIT 是一个高效的 Lua 语言虚拟机,其优化程度非常高,执行速度接近 C 语言。在 OpenResty 中,LuaJIT 被用于处理 HTTP 请求,执行业务逻辑,以及与后端数据库或其他服务交互...

    OpenResty安装过程.pptx

    #### 二、OpenResty在CentOS中的安装步骤 - **准备工作**: - 确保已经安装了`yum-utils`工具。 - 添加OpenResty的YUM仓库。 - **添加仓库**: ```bash sudo yum install yum-utils sudo yum-config-manager --...

    openresty源码(openresty-1.19.9.1.tar.gz)

    OpenResty在Nginx的基础上,添加了对Lua脚本的支持,使得开发人员可以在Nginx内部编写逻辑复杂的业务处理代码,极大地提高了开发效率。 OpenResty的源码中,包含了Nginx的配置文件、模块、第三方库以及Lua相关的...

    openresty_dev:OpenResty开发指南代码

    openresty_dev 这是OpenResty编程的示例代码。 要求 Linux或其他UNIX之类的 OpenResty 1.13.6.x或更高版本 链接 module-将Lua的功能嵌入Nginx module-将Lua的功能嵌入NGINX TCP服务器 也可以看看 -Nginx cpp开发...

Global site tag (gtag.js) - Google Analytics