Вернуть логическое значение из метода set_by_lua_block модуля lua nginx

Я использую модуль lua nginx в своем файле конфигурации nginx. Я пытаюсь установитьпеременная во время выполнения в зависимости от некоторых введенных параметров. Однако я не могу вернуть логическое значение из блока без преобразования его в строку. Я пытаюсь оптимизировать эту часть, пытаясь удалить это избыточное преобразование строк.

Этот работает

      location /set_by_lua_block_example {
             set_by_lua_block $value {
                return tostring(false)
             }
             
             add_header X-value "$value";

             content_by_lua_block {
                 ngx.say('Printing from set_by_lua_block_example!')
             }
        }

Но этот нет.

      location /set_by_lua_block_example {
             set_by_lua_block $value {
                return false
             }
             
             add_header X-value "$value";

             content_by_lua_block {
                 ngx.say('Printing from set_by_lua_block_example!')
             }
        }

1 ответ

The set_by_luaсемейство функций ожидает вывода строки следующим образом:

синтаксис : set_by_lua $res [$arg1 $arg2 ...]

Выполняет код, указанный в<lua-script-str>(...) и возвращает строковый вывод в$res.

Это относится к set_by_lua_block, слишком.

Более того, обратите внимание, что преобразование в вашем случае не является лишним. Вы используете это значение позже в текстовом заголовке HTTP .

Теперь, почему явныйtostring(boolean)необходим? Это потому что lua_tolstringиспользуется для получения возвращаемого значения . Эта функция (и вариант tostring) принимает только строки и числа.

Если вы хотите сохранить значения для использования в другом блоке Lua, рассмотрите возможность использования ngx.ctx.

Другие вопросы по тегам