Шлюз Kong API — чтение тела запроса в пользовательском плагине

#nginx #openresty #kong #lua-ngx-module #kong-plugin

#nginx #openresty #kong #lua-ngx-module #kong-плагин

Вопрос:

Я пытаюсь прочитать тело запроса в пользовательском плагине, перейдя по этому 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:

Этот вызов может быть вызван только на этапе «перезапись, доступ или admin_api».

Глядя на вывод вашего журнала, контекст, который вы пытаетесь вызвать, — это ngx.timer, который даже не включен Kong в качестве одного из своих контекстов. (Подробнее об этом здесь)

Что вы могли бы сделать, это вызвать «kong.request.get_body()» на этапе, который может его вызвать, сохранить его во временной переменной (используя объект «kong.ctx.plugin»), а затем использовать его на этапе «log» для указанного плагина.