我有以下内容:
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
为什么将变量设置为字符串而不是表?
答案 0 :(得分:0)
这里正在发生两件事:
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转换。