kong后台接口

在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代码,看起来实在费劲。

posted @ 2017-06-27 11:22  mentalidade  阅读(753)  评论(0编辑  收藏  举报