我们在使用lor的过程中,处理req的参数和res的返回,大抵上是这样的:
Router:post("/submit", function(req, res, next)
local Id = tonumber(req.body.id)
local body = req.body
if Id == nil then
local data = req.body.data
if data == nil then
res:json({
code = errorCode.requestParams,
}) return
end
body = cjson.decode(data)
examId = body.examId
end
local result, msg = Service:submit(id,data)
if type(result) == "number" then
if not msg then
msg = ""
end
res:json({
code = result,
msg = msg,
})
return
end
res:json({
code = 99999,
data = result
})
end)
这里面有几个问题,可以看出:
我们需要对每一次的请求参数进行处理和判断
我每次在返回数据时,都要自己加上code,result 这种东西
直接导致了,代码过重复,好多东西都要反复的复制,粘贴
那么,在已经抽像了错误处理机制的基础上,我们对res和req进行需要进行进一步的封装
中间件的加入
加入中间件 httpmiddle.lua ,文件如下:
localload'cjson'
locallogload'libs.log.log_helper'
localload"common.error"
locallocallocalfunction(req,res,next)function req:get(name,params)local ifnilthen endifnilandthen endifnilthen' 缺少' endifnilthenforinipairsdoifnilthen',''中缺少'endendendreturnendfunction res:send(ret)99999 endnextend
return
然后在我们的应的顶层路由加上这个中间件,如果已经加入了错误处理机制,那么代码就变成了:
Router:post("/submit", function(req, res, next)
local Id = tonumber(req:get('Id'))
local body = req:get('body')
local result, msg = Service:submit(Id,body)
res:send(result)
end
嗯,就是要足够好看。
附:错误处理的中间件机制看这里:基于 lor.index 的错误处理机制设计
散养程序猿
野生架构狮
二流搬砖工
三流摄影师
假正经真逗比
装文艺实二逼
所以,这么一个公众号里,会有代码,有段子,有美图,有鸡汤,反正,乱七八遭的,没准碰上哪个刚好就烦到您了呢
啥也不说,扫码关注吧