我有以下内容:
set_by_lua_block $tags {
local cjson=require("cjson")
return cjson.encode({language="english"})
}
然后在主应用程序中,我记录下来:
logger.info(asString(ngx.var.tags))
logger.info(type(ngx.var.tags)
这打印
{"language":"english"}
string
为什么变量设置为字符串而不是表?
这里发生了两件事:
cjson.encode
将表编码为JSON,这将返回一个字符串ngx.var
只能保存字符串,因为nginx变量也可以用于非Lua指令如果您想在同一个请求中将复杂值从一个块传送到另一个块,ngx.ctx就是您要寻找的。
例如:
rewrite_by_lua_block {
ngx.ctx.tags = {language="english"}
}
...
log_by_lua_block {
ngx.log(ngx.ERR, "language: ", ngx.ctx.tags.language)
}
请注意,此处不涉及JSON转换。