lapis http verb 处理
1. 同一个url 包含不同的请求(respond_to 进行解决)
// 路由格式 match ,通过respond_to 进行实际的http verb 处理
local lapis = require("lapis")
local respond_to = require("lapis.application").respond_to
local app = lapis.Application()
app:match("create_account", "/create-account", respond_to({
GET = function(self)
return { render = true }
end,
POST = function(self)
do_something(self.params)
return { redirect_to = self:url_for("index") }
end
}))
备注 respond_to 可以包含一个before 的filter 进行一个格外的权限,参数处理
如下:
app:match("edit_user", "/edit-user/:id", respond_to({
before = function(self)
self.user = Users:find(self.params.id)
if not self.user then
self:write({"Not Found", status = 404})
end
end,
GET = function(self)
return "Edit account " .. self.user.name
end,
POST = function(self)
self.user:update(self.params.user)
return { redirect_to = self:url_for("index") }
end
}))
2. 明确指明请求的http verb
如下:
app:get("/test", function(self)
return "I only render for GET requests"
end)
app:delete("/delete-account", function(self)
-- do something destructive
end)
3. http verb 请求的过滤(before filter )
// 全局控制
app:before_filter(function(self)
if not user_meets_requirements() then
self:write({redirect_to = self:url_for("login")})
end
end)
// respond_to 添加,例子参考上面的
4. http request && response API 参考
比较多,参考文档 http://leafo.net/lapis/reference/actions.html#routes-and-url-patterns/route-precedence
主要是一些 session cookies url 处理
5. http render 参数
参考格式
app:match("/", function(self)
return { render = "error", status = 404}
end)
参数选项
status — http 状态码
render — 渲染的模板名称
content_type — 内容类型
headers — http header 参数
json — 指定返回的数据是json 格式的,既 content_type application/json
layout — 指定渲染使用的模板,可以全局设置
redirect_to — 设置重定向类型 301 302 。。。
5. 默认请求处理 (默认路由)
function app:default_route()
ngx.log(ngx.NOTICE, "User hit unknown path " .. self.req.parsed_url.path)
-- call the original implementaiton to preserve the functionality it provides
return lapis.Application.default_route(self)
end
6. 异常错误处理
function app:handle_error(err, trace)
if config.custom_error_page then
return { render = "my_custom_error_page" }
else
return lapis.Application.handle_error(self, err, trace)
end
end
7. 参考文档
http://leafo.net/lapis/reference/actions.html#routes-and-url-patterns/route-precedence
https://github.com/leafo/lapis-exceptions
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)