在nginx-kong.lua中,require('lapis').serve('kong.api'),先require文件/usr/local/share/lua/5.1/lapis/init.lua,调用serve函数。
local application = require("lapis.application")
local Application
Application = application.Application
local app_cache = { }
setmetatable(app_cache, { -- 弱引用table,清除可能的无法删除的垃圾对象
__mode = "k"
})
local dispatcher
local serve
serve = function(app_cls)
local app = app_cache[app_cls]
if not (app) then
local name = app_cls
if type(name) == "string" then
app_cls = require(name)
end
if app_cls.__base then
app = app_cls()
else
app_cls:build_router()
app = app_cls
end
app_cache[name] = app
end
if not (dispatcher) then
if __leda then
dispatcher = require("lapis.leda")
else
dispatcher = require("lapis.nginx")
end
end
return dispatcher.dispatch(app)
end
return {
serve = serve,
application = application,
Application = Application,
app_cache = app_cache
}
serve函数引用kong.api,然后会require文件/usr/local/share/lua/5.1/kong/api/init.lua,这个文件返回一个对象app。
local app = lapis.Application()
调用上面那个init.lua的第二个方法Application(),
Application = application.Application => application.Application() => /usr/local/share/lua/5.1/lapis.application.Application()
里面就是实例化app对象,处理请求,错误处理,参数验证等。里面代码可能是moonScript生成的lua代码,看起来实在费劲。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章