Kong API Gateway-在自定义插件中读取请求正文

时间:2019-03-14 16:44:14

标签: nginx openresty kong lua-ngx-module kong-plugin

我正在尝试通过遵循this url

在自定义插件中读取请求正文
  local data = kong.request.get_body()
  if data then
      kong.log(data)
  end

我遇到以下错误

2019/03/14 21:57:55 [error] 14039#0: *45 lua entry thread aborted: runtime error: /usr/local/share/lua/5.1/kong/pdk/private/phases.lua:66: no phase in kong.ctx.core.phase
stack traceback:
coroutine 0:
        [C]: in function 'error'
        /usr/local/share/lua/5.1/kong/pdk/private/phases.lua:66: in function 'check_phase'
        /usr/local/share/lua/5.1/kong/pdk/request.lua:594: in function 'get_body'
        .../Apps/troop/kong/plugins/customlog/handler.lua:72: in function <.../Apps/troop/kong/plugins/customlog/handler.lua:62>, context: ngx.timer, client: 127.0.0.1, server: 0.0.0.0:8000
Can anyone help me understand the problem here? I need to log the request body in my plugin.

有人可以帮助我了解这里的问题吗?我需要在插件中记录请求正文。

1 个答案:

答案 0 :(得分:0)

该调用只能在“重写,访问或admin_api”阶段调用。

在您的日志输出中,您要调用的上下文是 ngx.timer ,Kong甚至没有将其包装为上下文之一。 (有关here的更多信息)

您可以做的是在一个可以调用它的阶段中调用“ kong.request.get_body()”,将其存储在一个临时变量中(使用“ kong.ctx.plugin”对象),然后在所述插件的“登录”阶段。