未验证 提交 e037c229 编写于 作者: J JJ Kasper 提交者: GitHub

Ensure optional params are normalized in minimal mode (#22676)

上级 a107dcb7
......@@ -369,10 +369,9 @@ export default class Server {
// interpolate dynamic params and normalize URL if needed
if (pageIsDynamic) {
let params: ParsedUrlQuery | false = {}
const paramsResult = utils.normalizeDynamicRouteParams({
...parsedUrl.query,
...query,
})
Object.assign(parsedUrl.query, query)
const paramsResult = utils.normalizeDynamicRouteParams(parsedUrl.query)
if (paramsResult.hasValidParams) {
params = paramsResult.params
......@@ -407,6 +406,7 @@ export default class Server {
pathname: matchedPathname,
})
}
Object.assign(parsedUrl.query, params)
utils.normalizeVercelUrl(req, true)
}
......
export default (req, res) => {
console.log(req.url, 'query', req.query)
res.json({
url: req.url,
query: req.query,
})
}
export const getStaticProps = ({ params }) => {
return {
props: {
random: Math.random(),
params: params || null,
},
revalidate: 1,
}
}
export const getStaticPaths = () => {
return {
paths: [],
fallback: true,
}
}
export default function Page(props) {
return <p id="props">{JSON.stringify(props)}</p>
}
export const getServerSideProps = ({ query, params }) => {
return {
props: {
random: Math.random(),
query: query,
params: params || null,
},
}
}
export default function Page(props) {
return <p id="props">{JSON.stringify(props)}</p>
}
......@@ -448,4 +448,58 @@ describe('Required Server Files', () => {
expect(errors.length).toBe(1)
expect(errors[0].message).toContain('gsp hit an oops')
})
it('should normalize optional values correctly for SSP page', async () => {
const res = await fetchViaHTTP(
appPort,
'/optional-ssp',
{ rest: '', another: 'value' },
{
headers: {
'x-matched-path': '/optional-ssp/[[...rest]]',
},
}
)
const html = await res.text()
const $ = cheerio.load(html)
const props = JSON.parse($('#props').text())
expect(props.params).toEqual({})
expect(props.query).toEqual({ another: 'value' })
})
it('should normalize optional values correctly for SSG page', async () => {
const res = await fetchViaHTTP(
appPort,
'/optional-ssg',
{ rest: '', another: 'value' },
{
headers: {
'x-matched-path': '/optional-ssg/[[...rest]]',
},
}
)
const html = await res.text()
const $ = cheerio.load(html)
const props = JSON.parse($('#props').text())
expect(props.params).toEqual({})
})
it('should normalize optional values correctly for API page', async () => {
const res = await fetchViaHTTP(
appPort,
'/api/optional',
{ rest: '', another: 'value' },
{
headers: {
'x-matched-path': '/api/optional/[[...rest]]',
},
}
)
const json = await res.json()
expect(json.query).toEqual({ another: 'value' })
expect(json.url).toBe('/api/optional?another=value')
})
})
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册