2017-04-05 9 views
-1

私はluaでnginxを使用しています。私のESクラスタにアクセスするには、私はluaコードで設定しています。私は私が間違っている場合誰も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

私はあなたのコードが何を知りたい場合は、Luaのリファレンスマニュアルを参照してくださいお勧め:

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

あなたは印刷を使用することができますあなたの例ではどのようなstring.matchリターンを知りたい場合は関数。例えば

:あなたたとえば

p = string.match(uri, path) 
print(p) 

http://localhost/_GET,method:GET、パス:/ _ GETすると

地元のp = string.match(URI、パス

はURLとします) - >次にp変数の値がGET(すなわち p = GET)

は、実際には"/_GET"

/_GETがあなたのパターンです。 string.matchはこのシンプルなdinstinctパターンのパターンマッチだけを返します。

たとえば、任意の数の一致を要求する場合は、たとえば文字列から実際の番号を取得します。

関連する問題