#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» для указанного плагина.