属性
lor:
version
router
route
request
response
fn
app
create_app
Router
Route
Request
Response 属性
lor() 或者 App:
cache
settings --conf函数操作此table设置key --value
router
run(final_handler) /---步骤一---/
init(options)
default_configuration(options)
handle(req, res, callback) /---步骤二 ---*/
use(path, fn) --跳转执行 inner_use(, path, fn) --> (Router:new({})):use('/', fn, ) /**步骤一 **/
erroruse(path, fn)
inner_use(fn_args_length, path, fn)
init_method()--初始化 给自身新增更多的方法
get = true, -- work well
post = true, -- work well
head = true, -- no test
options = true, -- no test
put = true, -- work well
patch = true, -- no test
delete = true, -- work well
trace = true, -- no test
all = true -- todo:
all(path, fn)
conf(setting, val) --设置配置
getconf(setting) --获取配置
enable(setting)--将某项配置开启
disable(setting)--将某项配置关闭 属性
Router:
new(options) /**步骤二 **/
name => 值为 "origin-router-" .. random()
group_router
stack -- 将把实例化后的Layer对象插入到此table中 /**步骤五 **/
_call()
call()
handle(req, res, out) /---步骤三 ---*/
use(path, fn, fn_args_length) -- 新增路由 /**步骤三 **/
app_route(path) -- 新增路由
route(path) -- 新增路由
init() --初始化 给自身新增更多的方法
get = true, -- work well
post = true, -- work well
head = true, -- no test
options = true, -- no test
put = true, -- work well
patch = true, -- no test
delete = true, -- work well
trace = true, -- no test
all = true -- todo: 属性
Layer:
new(path, options, fn, fn_args_length) /**步骤四 **/
handle => 值为 fn
name => 值为 "layer-" .. random()
params
path => 值为 path
keys
length => 值为 fn_args_length
is_end => 值为 false
is_start => 值为 true
pattern => 值为 "/"
handle_error(err, req, res, next)
handle_request(req, res, next)
match(path) --对每一个路由规则 进行匹配 属性
Request
next
new()
path = ngx.var.uri, -- uri
method = ngx.req.get_method(),
query = ngx.req.get_uri_args(),
params = {},
body = body,
body_raw = ngx.req.get_body_data(),
url = ngx.var.request_uri,
origin_uri = ngx.var.request_uri,
uri = ngx.var.request_uri,
headers = headers, -- request headers
req_args = ngx.var.args,
found = false -- or not
is_found()
set_found(found) 属性
Response
http_status = nil,
headers = {},
locals = {},
body = '--default body. you should not see this by default--',
view = nil
render(view_file, data)
html(data)
redirect(url, code, query)
location(url, data)
send(text) main.lua
路线一:
app --> lor() --执行那个 “函数A” --> Application.lua文件的返回 返回新table 并将Application类设为新table的元方法
注意:Application 下有如下方法
get = true, -- work well
post = true, -- work well
head = true, -- no test
options = true, -- no test
put = true, -- work well
patch = true, -- no test
delete = true, -- work well
trace = true, -- no test
all = true -- todo:
值等于同一个函数 function(path, fn)
local route = router:app_route(path)
route[http_method](route, fn) -- like route:get(fn)
return self
end --> lor.lua文件的返回 传入 一个“函数A“进去
--> wrap.lua文件的返回 返回新table 并将wrap类设为新table的元方法 路线二:
app:use(函数)--> App:use() 没有返回值 --> App:inner_use() 返回self
--> Router:use() 返回self 并设置了 table.insert(self.stack, layer:new())
--> Layer:new() 返回新table 并将 Layer类设为新table的元方法 路线三:
app:run() --> App:run() --> App:handle()-->router:handle //作者在此函数下了不少功夫.,.....

lor框架代码分析的更多相关文章

  1. 一个简单的"RPC框架"代码分析

    0,服务接口定义---Echo.java /* * 定义了服务器提供的服务类型 */ public interface Echo { public String echo(String string) ...

  2. PHPCMS V9 框架代码分析(入口程序)

    PHPCMS是采用MVC设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口. 入口程序是在前期处理用户请求的引导程序.它是 ...

  3. Linux摄像头驱动学习之:(六)UVC-基本框架代码分析

    仿照内核的自带UVC(usb video class)驱动程序写的一版简化驱动,仅供学习,实际项目开发中应该尽量使用内核自带的驱动,除非内核自带的驱动不支持此款硬件才需要自己写驱动. 下面就直接上代码 ...

  4. 开源代码分析之Android/iOS Hybrid JSBridge框架

    Hybrid开发是现在的主流形式,对于业务快速迭代的公司尤其重要.曾将在鞋厂接触了很多关于Hybrid的理念,在这里分享一些Hybrid框架思想. Hybrid框架包括Native与H5的通信,Web ...

  5. 11.5 Android显示系统框架_Vsync机制_代码分析

    5.5 surfaceflinger对vsync的处理buffer状态图画得不错:http://ju.outofmemory.cn/entry/146313 android设备可能连有多个显示器,AP ...

  6. 完整全面的Java资源库(包括构建、操作、代码分析、编译器、数据库、社区等等)

    构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...

  7. 动态加载框架DL分析

    动态加载框架DL分析 插件化开发,主要解决三个问题1.动态加载未安装的apk,dex,jar等文件2.activity生命周期的问题,还有service3.Android的资源调用的问题 简单说一下怎 ...

  8. angular代码分析之异常日志设计

    angular代码分析之异常日志设计 错误异常是面向对象开发中的记录提示程序执行问题的一种重要机制,在程序执行发生问题的条件下,异常会在中断程序执行,同时会沿着代码的执行路径一步一步的向上抛出异常,最 ...

  9. Linux内核中的GPIO系统之(3):pin controller driver代码分析

    一.前言 对于一个嵌入式软件工程师,我们的软件模块经常和硬件打交道,pin control subsystem也不例外,被它驱动的硬件叫做pin controller(一般ARM soc的datash ...

随机推荐

  1. spark和hadoop比较

    来源知乎 计算模型:hadoop-MapReduce,Spark-DAG(有向无环图)评注:经常有人说Spark就是内存版的MapReduce,实际上不是的.Spark使用的DAG计算模型可以有效的减 ...

  2. 洛谷P1177快速排序

    传送门 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  3. 【CF767C】Garland

    传送门啦 分析: 这个题我是看着翻译做的,感觉不是很难,很普通的一个树形dp 题目大意: 在一棵树上分离出三个子树,使这三个子树的点权和相等. 明确题目意思这个题就简单多了吧. 我们会发现每一棵子树的 ...

  4. js数组基本操作

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtm ...

  5. eclipse中Maven项目jar问题

    eclipse中Maven项目jar包下载下来了,不然我们import是时候根本导入不进来,网上的方法都试过了,Maven仓库也清空过后重新下载过了,都解决不了. 后来发现虽然jar包是下载下来了,可 ...

  6. MySQL学习笔记:delete

    使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录. 语法: DELETE FROM table_name [WHERE Clause] 如果没有指定 WHERE 子句, ...

  7. Ansible之迭代、模板

    本节内容: 迭代 模板(JInjia2相关) Jinja2相关 一.迭代 当有需要重复性执行的任务时,可以使用迭代机制.其使用格式为将需要迭代的内容定义为item变量引用,并通过with_items语 ...

  8. android拾遗——Android Intent详解

    一. Intent 作用 Intent 是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯.比如说调用startActivity()来 ...

  9. MySQL慢查询优化

    MySQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在大量数据进行比对或聚合时.磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在网络上,那么查询量相当大的 ...

  10. Linux 中 &、jobs、fg、bg 等命令

    参考  Unix 或 Linux 中 &.jobs.fg.bg 等命令的使用方法 对之前文章的一个补充: linux 命令后台运行 这篇还是比较简单的,稍微一带而过 fg.bg.jobs.&a ...