我正在使用OpenResty,我的应用程序设置为:
app/
clients/
photoClient.lua
init.lua
auth.lua
假设photoClient
有一个未经身份验证和经过身份验证的端点(类似于无需登录即可访问的头像端点,但可能需要首先登录的私有照片)
所以在依赖性方面,我有:
-- auth.lua
local photoClient = require('app.clients.photoClient')
-- this is used to show avatar on the login page
local auth = {}
auth.isAuthenticated = function ()
-- logic to check authentication
end
return auth
而客户是
-- photoClient.lua
local auth = require('app.auth')
local photoClient = {}
photoClient.privateEndpoint = function()
if (!auth.isAuthenticated()) {
ngx.exit(403)
}
...
end
photoClient.getAvator = function() {
-- this is a public method used by auth
}
return photoClient
这给了我循环依赖问题。我在other SO post上看到你可以使用全局变量,即做photoClient = photoClient or require('app.clients.photoClient')
,但我不想使用全局变量,并希望保持每个模块的范围。
我怎样才能做到这一点?
在Kate Adams的LuaFlare文档中找到了解决方案:基本上在为每个文件执行package.loaded[...] = your_module
之前添加return your_module
,即
-- auth.lua
local auth = {}
package.loaded[...] = auth
local photoClient = require('app.clients.photoClient')
...
return auth
-- photoClient.lua
local photoClient = {}
package.loaded[...] = photoClient
local auth = require('app.auth')
...
return photoClient
解决了这个问题。 Here is the link到本书页面,供有兴趣阅读更多内容的人阅读。