从0.2.*迁移到0.3.0版本

Lor v0.2.* 是上个稳定版本, 之后将不再在此版本上添加新特性, 建议尽快升级到最新的0.3稳定版本。
0.3版本的API与0.2.*保持兼容,同时提供更强大易用的功能。

404错误中间件的变更

0.2.*版本的404错误需要在最后一个app:use业务中间件来捕获, 而其它错误(如500错)需要通过app:erroruse错误中间件来捕获, 如下:

-- 业务中间件
app:use(function(req, res, next)
-- do something
next()
end)
-- 其它业务路由处理
-- router(app)
-- 最后一个`业务中渐渐`来处理404错误
app:use(function(req, res, next)
if req:is_found() ~= true then
res:status(404):send("404! sorry, not found.")
end
end)
-- 其它错误处理, 比如500错
app:erroruse(function(err, req, res, next)
ngx.log(ngx.ERR, err)
res:status(500):send("500! unknown error.")
end)

从0.3.0版本开始, 将把404错误当做普通的错误情况对待,也就是统一通过app:erroruse错误中间件来捕获, 即应将上述代码修改为类似以下格式的写法:

-- 业务中间件
app:use(function(req, res, next)
-- do something
next()
end)
-- 其它业务路由处理
-- router(app)
-- 错误处理, 如404错、 500错等等
app:erroruse(function(err, req, res, next)
ngx.log(ngx.ERR, err)
if req:is_found() ~= true then
res:status(404):send("404! sorry, not found. " .. (req.path or ""))
else
res:status(500):send("unknown error")
end
end)

路由加载顺序和执行顺序

0.2.*版本, 路由的加载顺序匹配顺序是跟代码编写顺序相关的, 而0.3.0对此做了更改, 它们的差异主要表现在以下两种用例上。

用例1

app:use("/user", function(req, res, next) next() end) --①
app:use("/user/foo", function(req, res, next) next() end) --②
app:use("/user/foo", function(req, res, next) --③
res:send("this is foo")
end)

对于0.2.*版本来说:

然而对于0.3.0版本来说:

用例2

对于0.2.*版本, 错误中间件即app:erroruse只能定义在所有路由的后面, 但0.3.0打破了此限制, 业务中间价和错误处理中间价的定义可以放在任意地方, 不再与定义顺序强相关。

其它更改和改进