custom-matcher.lua
local Router = require "radix-router"
local ip_matcher = {
process = function(route)
if route.ips then
local ips = {}
for _, ip in ipairs(route.ips) do
ips[ip] = true
end
route.ips = ips
end
end,
match = function(route, ctx, matched)
if route.ips then
local ip = ctx.ip
if not route.ips[ip] then
return false
end
if matched then
matched["ip"] = ip
end
end
return true
end
}
local opts = {
matchers = { ip_matcher }, matcher_names = { "method" }, }
local router = Router.new({
{
paths = { "/" },
methods = { "GET", "POST" },
ips = { "127.0.0.1", "127.0.0.2" },
handler = "1",
},
{
paths = { "/" },
methods = { "GET", "POST" },
ips = { "192.168.1.1", "192.168.1.2" },
handler = "2",
}
}, opts)
assert("1" == router:match("/", { method = "GET", ip = "127.0.0.2" }))
local matched = {}
assert("2" == router:match("/", { method = "GET", ip = "192.168.1.2" }, nil, matched))
print(matched.method) print(matched.ip)