Seb*_*hio 2 middleware next.js
//这行不通
rules.filter(rule => rule.type === 'redirect' && new RegExp(rule.rule).exec(pathname.slice(1)))
.map(rule => {
console.log('match');
const url = req.nextUrl.clone()
url.pathname = rule.destination
return NextResponse.redirect(url)
})
Run Code Online (Sandbox Code Playgroud)
//这确实有效
for (let rule of rules) {
const regex: RegExp = new RegExp(rule.rule)
if(regex.exec(pathname.slice(1)) && rule.type === 'redirect') {
console.log('match');
const url = req.nextUrl.clone()
url.pathname = rule.destination
return NextResponse.redirect(url)
}
}
Run Code Online (Sandbox Code Playgroud)
中间件已经通过 de for 循环运行良好
Reddit 给了我解决方案,我把它留在这里
里面的 return 语句map只是添加到映射输出数组中。
for 循环中的 return 语句退出该函数。
如果中间件返回 NextResponse.redirect(),Next.js 将重定向,就像使用 for 循环和 return 语句一样。
let result
rules.filter(rule => rule.type === 'redirect' && new RegExp(rule.rule).exec(pathname.slice(1)))
.map(rule => {
console.log('match');
url.pathname = rule.destination
result = NextResponse.redirect(url)
})
return result
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7604 次 |
| 最近记录: |