任何人都可以解释下面的LUA代码如何工作?

时间:2017-04-05 11:36:10

标签: elasticsearch nginx lua

我正在使用lgin的nginx。要访问我的ES群集,我使用lua代码进行配置。我想知道代码是如何工作的。

-- get URL
local uri = ngx.var.uri

-- get method
local method = ngx.req.get_method()

local allowed  = false

for path, methods in pairs(restrictions[role]) do
  -- path matched rules?
  local p = string.match(uri, path)

  -- method matched rules?
  local m = nil
  for _, _method in pairs(methods) do
    m = m and m or string.match(method, _method)
  end

  if p and m then
    allowed = true
    break
  end
end

if not allowed then
  return write403Message()
end

让我们成为URL: http://localhost/_GETmethod:GETpath:/_GET 然后

local p = string.match(uri, path) -->Then p variable has value GET(i.e p=GET)

如果我错了,请纠正我?

for _, _method in pairs(methods) do
        m = m and m or string.match(method, _method)
      end

上面的代码片段会做什么?

1 个答案:

答案 0 :(得分:1)

如果您想知道代码的作用,我建议您参考Lua参考手册:

https://www.lua.org/manual/5.3/manual.html#pdf-string.match

如果你想知道你的例子中string.match返回什么,你可以使用print函数。

例如:

foreach (var item in dgridList.Items.OfType<YourClass>())
{
    var name = item.t_name;
    var type = item.t_type;
    Tuple<string, string> mod = new Tuple<string, string>(name, type);
    Alist.Add(mod);
}

对于你的例子:

  

设为网址:http://localhost/_GET,method:GET,路径:/ _ GET然后

     

local p = string.match(uri,path) - &gt;然后p变量具有值GET(即   P = GET)

p = string.match(uri, path) print(p) 将实际引用p

/ _ GET是你的模式。 string.match将返回匹配,对于这个简单的dinstinct模式只是模式本身。

例如,如果您要求匹配任何数字,例如,您将从字符串中获取实际数字。