各位好!
描述: 在模块中定义了一个全局方法 test.
测试代码中打印_G,
第一次请求的时候, _G里面包含该方法, (第一次直服务器启动后第一次访问改代码, lua_cache开启)
再次请求, _G里面不再包含这个方法.
问题:
1. 请问这里面是什么原理,
2. 这就是为什么最佳时间中提到 " 注:对于需要导出给外部使用的公共模块,处于安全考虑,是要避免全局变量的出现。" 这句话的原因吗.
这个是两次刷新的结果截图,
代码如下:
谢谢 !!
Hello!为了防止全局变量的滥用,ngx_lua 在各个阶段(rewrite_by_lua*,access_by_lua* 等)都设置了一个新的 table 作为全局变量表(以原来的 G 表作为元表),所以你在当前阶段的全局变量表里新建的变量、函数,对其他请求以及运行到其他阶段时,都是不可见的,如果想要这么用的话,需要提前到 init 或者 init_worker 的时候处理。