mirror of
https://gitee.com/iresty/apisix.git
synced 2024-12-04 04:57:35 +08:00
fix: be compatible with the router created before 2.5 (#4056)
Signed-off-by: spacewander <spacewanderlzx@gmail.com>
This commit is contained in:
parent
cd4d2ece58
commit
5259b8c796
@ -23,6 +23,7 @@ local ngx_socket = ngx.socket
|
||||
local original_tcp = ngx.socket.tcp
|
||||
local concat_tab = table.concat
|
||||
local new_tab = require("table.new")
|
||||
local expr = require("resty.expr.v1")
|
||||
local log = ngx.log
|
||||
local WARN = ngx.WARN
|
||||
local ipairs = ipairs
|
||||
@ -227,6 +228,27 @@ local function luasocket_tcp()
|
||||
end
|
||||
|
||||
|
||||
local patched_expr_new
|
||||
do
|
||||
local function eval_empty_rule(self, ctx, ...)
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
local mt = {__index = {eval = eval_empty_rule}}
|
||||
local old_expr_new = expr.new
|
||||
|
||||
|
||||
function patched_expr_new(rule)
|
||||
if #rule == 0 then
|
||||
return setmetatable({}, mt)
|
||||
end
|
||||
|
||||
return old_expr_new(rule)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function _M.patch()
|
||||
-- make linter happy
|
||||
-- luacheck: ignore
|
||||
@ -238,6 +260,8 @@ function _M.patch()
|
||||
|
||||
return luasocket_tcp()
|
||||
end
|
||||
|
||||
expr.new = patched_expr_new
|
||||
end
|
||||
|
||||
|
||||
|
@ -112,7 +112,7 @@ Config Example:
|
||||
"name": "route-xxx",
|
||||
"desc": "hello world",
|
||||
"remote_addrs": ["127.0.0.1"], # A set of Client IP.
|
||||
"vars": [], # A list of one or more `{var, operator, val}` elements
|
||||
"vars": [["http_user", "==", "ios"]], # A list of one or more `[var, operator, val]` elements
|
||||
"upstream_id": "1", # upstream id, recommended
|
||||
"upstream": {}, # upstream, not recommended
|
||||
"filter_func": "", # User-defined filtering function
|
||||
|
@ -107,7 +107,7 @@ route 对象 json 配置内容:
|
||||
"name": "路由xxx",
|
||||
"desc": "hello world",
|
||||
"remote_addrs": ["127.0.0.1"], # 一组客户端请求 IP 地址
|
||||
"vars": [], # 由一个或多个 {var, operator, val} 元素组成的列表
|
||||
"vars": [["http_user", "==", "ios"]], # 由一个或多个 [var, operator, val] 元素组成的列表
|
||||
"upstream_id": "1", # upstream 对象在 etcd 中的 id ,建议使用此值
|
||||
"upstream": {}, # upstream 信息对象,建议尽量不要使用
|
||||
"filter_func": "", # 用户自定义的过滤函数,非必填
|
||||
|
45
t/router/radixtree-uri-vars.t
vendored
45
t/router/radixtree-uri-vars.t
vendored
@ -383,3 +383,48 @@ demo: prod
|
||||
--- error_code: 404
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
||||
|
||||
|
||||
=== TEST 19: be compatible with empty vars
|
||||
--- config
|
||||
location /t {
|
||||
content_by_lua_block {
|
||||
local t = require("lib.test_admin").test
|
||||
local code, body = t('/apisix/admin/routes/1',
|
||||
ngx.HTTP_PUT,
|
||||
[=[{
|
||||
"methods": ["GET"],
|
||||
"upstream": {
|
||||
"nodes": {
|
||||
"127.0.0.1:1980": 1
|
||||
},
|
||||
"type": "roundrobin"
|
||||
},
|
||||
"uri": "/hello",
|
||||
"vars": []
|
||||
}]=]
|
||||
)
|
||||
|
||||
if code >= 300 then
|
||||
ngx.status = code
|
||||
end
|
||||
ngx.say(body)
|
||||
}
|
||||
}
|
||||
--- request
|
||||
GET /t
|
||||
--- response_body
|
||||
passed
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
||||
|
||||
|
||||
=== TEST 20: hit
|
||||
--- request
|
||||
GET /hello
|
||||
--- response_body
|
||||
hello world
|
||||
--- no_error_log
|
||||
[error]
|
||||
|
Loading…
Reference in New Issue
Block a user