检查nginx_lua中请求方法的正确方法

检查nginx_lua中请求方法的正确方法,nginx,lua,Nginx,Lua,我正在尝试使用nginx和lua编写一个REST接口。我想知道的是,检查请求方法的最佳方法是什么?如果是GET,我需要查询数据库。如果是POST或DELETE,我需要运行另一个lua脚本来更新数据库。 到目前为止,我的代码就是这样来测试请求方法的: #curl -i -X GET 'http://localhost/widgets/widget?name=testname&loc=20000' -H "Accept:application/json" location /

我正在尝试使用nginx和lua编写一个REST接口。我想知道的是,检查请求方法的最佳方法是什么?如果是GET,我需要查询数据库。如果是POST或DELETE,我需要运行另一个lua脚本来更新数据库。 到目前为止,我的代码就是这样来测试请求方法的:

    #curl -i -X GET 'http://localhost/widgets/widget?name=testname&loc=20000' -H "Accept:application/json"
    location /widgets/widget {
            default_type "text/pain";
            #ifisEvil... unless done inside lua
            content_by_lua '
                    ngx.say("request is:",ngx.var.request_method)
                    ngx.say("the constant is:",ngx.HTTP_GET)
                    --ngx.say("the type is: ", type(ngx.HTTP_GET)

                    if ngx.var.request_method == ngx.HTTP_GET then
                            local args = ngx.req.get_uri_args()
                            for key, val in pairs(args) do
                                    if type(val) == "table" then
                                            ngx.say(key, ": ", table.concat(val, ", "))
                                    else
                                            ngx.say(key, ": ", val)
                                    end
                            end
                    end
            ';

    }
输出如下所示:

mytestdevbox2:/var/www/nsps2# curl -i -X GET 'http://localhost/widgets/widget?name=testname&loc=20000' -H "Accept:application/json"
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Wed, 25 Feb 2015 13:44:11 GMT
Content-Type: text/pain
Transfer-Encoding: chunked
Connection: keep-alive

request is:GET
the constant is:2
mytestdevbox2:/var/www/nsps2# 
上面的输出解释了if语句失败的原因。。。因为我把“GET”和“2”作比较。如果常数已经可用,并且我只是缺少了一些东西,我宁愿不要自己列出它们

我知道有一个名为“$request\u method”的nginx变量,但我不想使用它,因为我想将所有逻辑都保存在lua中。从我到目前为止所读到的内容来看,在nginx中使用“if”语句是非常有用的
所以我试着用lua代码来处理类似的事情


关于我可能把lua代码弄乱的地方有什么提示吗

Lua的方法常量,如ngx.HTTP_GET,是根据他们的文档

因此,在Lua中检查方法的“最佳”方法莫过于将其与
GET
和其他方法字符串进行比较


不过,我会认真考虑使用基于nGixLead的方法来拆分请求。


这使您可以为每个方法配置单独的日志记录、错误处理等功能。

只需与
'GET'
字符串进行比较即可<代码>如果是邪恶的,但有时仍然比其他任何东西都好。你有一个很不自然的例子。你到底想做什么?这有什么不自然的?你能扩展吗?我洗耳恭听,因为我刚刚接触nginx。现在的代码只是测试代码,但是已经说过,检查请求类型是很正常的事情不是吗?然后我唯一的另一个逻辑就是解析input@AlexeyTen. 我知道我可以将它与字符串GET进行比较,但我想知道是否还有其他方法,比如使用某个现有常量,我只是不熟悉。我的意思是,检查请求方法不是一个目标,而是一种做其他事情的方法。你最好解释一下真正的问题是什么。可能有更简单更干净的方法来解决它。
GET
是常量。它是您应该与之进行比较的确切的三个字节