为什么在nginx Lua处理请求时修改变量?

问题描述

我刚刚开始学习Lua。

每次请求时,我都想检查请求参数中的name参数。但是,实际上发现self.name偶尔更改了。

例如,

request A with params: request_id = 123 & name = ABC,request B with params: request_id = 321 & name = EFG,

在日志中,我发现有requests_id = 123,但是有name = EFG

那是为什么?我的课写得不正确吗?


这是示例代码

main.lua:

local checker = require "checker"
local ch = checker:new()

    
if ch:check_name() then
    ngx.header["Content-Type"] = "application/json"
    ngx.status = ngx.HTTP_FORBIDDEN
    ngx.exit(ngx.HTTP_FORBIDDEN)
end

checker.lua:

local utils = require "utils"


local _M = {}


function _M:new()
    local o = {}
    setMetatable(o,self)
    self.__index = self

    self.args = utils.get_req_args() or {}

    local name = self.args["name"] or ""
    local request_id = self.args["request_id"] or ""

    self.name = name
    return o
end

function _M:check_name()
    ngx.log(ngx.ERR,"request_id: ",self.request_id," name: ",self.name)
    
    -- do some check ...
end

utils.lua

local json = require "cjson"

local _M = {}

function _M.new(self)
    return self
end


function _M.get_req_args()
    -- GET 
    local args = nil
    if ngx.var.request_method == "GET" then
        args = ngx.req.get_uri_args()
    -- POST 
    elseif ngx.var.request_method == "POST" then
        ngx.req.read_body()
        local data = ngx.req.get_body_data()
        args = json.decode(data)
    end
    return args
end

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)