检查nginx_lua中请求方法的正确方法
我正在尝试使用nginx和lua编写一个REST接口。我想知道的是,检查请求方法的最佳方法是什么?如果是GET,我需要查询数据库。如果是POST或DELETE,我需要运行另一个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 /
#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
是常量。它是您应该与之进行比较的确切的三个字节