local http = require "http"
local App = {}
App.__index = App
function App:add_route(method, pattern, callback)
table.insert(self.routes, {method, pattern, callback})
end
function App:run(port)
self.server:run(port)
end
local function new_app(routes)
local obj = setmetatable({}, App)
obj.routes = routes or {}
obj.server = http.new_http()
function obj.server:process(req)
for i, route in ipairs(obj.routes) do
local method, pattern, func = unpack(route)
if req.method == method then
local params = {req.path:match("^"..pattern.."$")}
if #params > 0 then
return func(req, unpack(params))
end
end
end
return "nothing here", 404, "Not found"
end
return obj
end
return {new_app=new_app}