Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CoCo_Code_Op2
next.js
提交
97587eb8
N
next.js
项目概览
CoCo_Code_Op2
/
next.js
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
next.js
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
97587eb8
编写于
5月 18, 2020
作者:
J
JJ Kasper
提交者:
GitHub
5月 18, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Correct multi-match behavior for queries and header values (#13017)
上级
dd264f58
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
57 addition
and
2 deletion
+57
-2
packages/next/next-server/server/next-server.ts
packages/next/next-server/server/next-server.ts
+5
-1
packages/next/next-server/server/router.ts
packages/next/next-server/server/router.ts
+4
-1
test/integration/custom-routes/next.config.js
test/integration/custom-routes/next.config.js
+13
-0
test/integration/custom-routes/test/index.test.js
test/integration/custom-routes/test/index.test.js
+35
-0
未找到文件。
packages/next/next-server/server/next-server.ts
浏览文件 @
97587eb8
...
...
@@ -482,7 +482,11 @@ export default class Server {
!
parsedDestination
.
pathname
||
!
parsedDestination
.
pathname
.
startsWith
(
'
/
'
)
)
{
return
compilePathToRegex
(
value
,
{
validate
:
false
})(
params
)
// the value needs to start with a forward-slash to be compiled
// correctly
return
compilePathToRegex
(
`/
${
value
}
`
,
{
validate
:
false
})(
params
).
substr
(
1
)
}
return
formatUrl
(
parsedDestination
)
}
...
...
packages/next/next-server/server/router.ts
浏览文件 @
97587eb8
...
...
@@ -58,8 +58,11 @@ export const prepareDestination = (
for
(
const
[
key
,
strOrArray
]
of
Object
.
entries
(
destQuery
))
{
let
value
=
Array
.
isArray
(
strOrArray
)
?
strOrArray
[
0
]
:
strOrArray
if
(
value
)
{
// the value needs to start with a forward-slash to be compiled
// correctly
value
=
`/
${
value
}
`
const
queryCompiler
=
compilePathToRegex
(
value
,
{
validate
:
false
})
value
=
queryCompiler
(
params
)
value
=
queryCompiler
(
params
)
.
substr
(
1
)
}
destQuery
[
key
]
=
value
}
...
...
test/integration/custom-routes/next.config.js
浏览文件 @
97587eb8
...
...
@@ -91,6 +91,10 @@ module.exports = {
source
:
'
/catchall-rewrite/:path*
'
,
destination
:
'
/with-params
'
,
},
{
source
:
'
/catchall-query/:path*
'
,
destination
:
'
/with-params?another=:path*
'
,
},
]
},
async
redirects
()
{
...
...
@@ -283,6 +287,15 @@ module.exports = {
},
],
},
{
source
:
'
/catchall-header/:path*
'
,
headers
:
[
{
key
:
'
x-value
'
,
value
:
'
:path*
'
,
},
],
},
]
},
},
...
...
test/integration/custom-routes/test/index.test.js
浏览文件 @
97587eb8
...
...
@@ -178,6 +178,22 @@ const runTests = (isDev = false) => {
})
})
it
(
'
should have correct query for catchall rewrite
'
,
async
()
=>
{
const
html
=
await
renderViaHTTP
(
appPort
,
'
/catchall-query/hello/world?a=b
'
)
const
$
=
cheerio
.
load
(
html
)
expect
(
JSON
.
parse
(
$
(
'
#__NEXT_DATA__
'
).
html
()).
query
).
toEqual
({
a
:
'
b
'
,
another
:
'
hello/world
'
,
path
:
[
'
hello
'
,
'
world
'
],
})
})
it
(
'
should have correct query for catchall rewrite
'
,
async
()
=>
{
const
res
=
await
fetchViaHTTP
(
appPort
,
'
/catchall-header/hello/world?a=b
'
)
const
headerValue
=
res
.
headers
.
get
(
'
x-value
'
)
expect
(
headerValue
).
toBe
(
'
hello/world
'
)
})
it
(
'
should allow params in query for redirect
'
,
async
()
=>
{
const
res
=
await
fetchViaHTTP
(
appPort
,
...
...
@@ -716,6 +732,18 @@ const runTests = (isDev = false) => {
regex
:
normalizeRegEx
(
'
^
\\
/named-pattern(?:
\\
/(.*))$
'
),
source
:
'
/named-pattern/:path(.*)
'
,
},
{
headers
:
[
{
key
:
'
x-value
'
,
value
:
'
:path*
'
,
},
],
regex
:
normalizeRegEx
(
'
^
\\
/catchall-header(?:
\\
/((?:[^
\\
/]+?)(?:
\\
/(?:[^
\\
/]+?))*))?$
'
),
source
:
'
/catchall-header/:path*
'
,
},
],
rewrites
:
[
{
...
...
@@ -840,6 +868,13 @@ const runTests = (isDev = false) => {
),
source
:
'
/catchall-rewrite/:path*
'
,
},
{
destination
:
'
/with-params?another=:path*
'
,
regex
:
normalizeRegEx
(
'
^
\\
/catchall-query(?:
\\
/((?:[^
\\
/]+?)(?:
\\
/(?:[^
\\
/]+?))*))?$
'
),
source
:
'
/catchall-query/:path*
'
,
},
],
dynamicRoutes
:
[
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录