Kong API Gateway - чтение тела запроса в пользовательском плагине
Я пытаюсь прочитать тело запроса в пользовательском плагине, следуя этому 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()" в фазе, которая может вызвать его, сохранить его в temp var (используя объект "kong.ctx.plugin"), а затем использовать его в "log" фаза для указанного плагина.