问题描述
让我们说我有一个网站asdf.com,我想写一个可以进行大量重定向(超过30个)的工作程序。例如www.asdf.com/app-> app-asdf.com,www.asdf.com/dashboard-> dashboard-asdf.com。 我尝试了以下操作,但不起作用:
async function handleEvent(event) {
const url = new URL(event.request.url)
// Redirects
const redirects = {
'bitgravity': 'tata-communications','highwinds': 'stackpath','maxcdn': 'stackpath','netdna': 'stackpath','level3': 'centurylink','/blog/Feed/': '/blog/Feed.xml','/blogdef/': '/social/blog/','/geodef/': '/social/geo/','/guidedef/': '/social/guides/','/blog/akamai-down/': '/blog/'
}
let target = null
for (const source in redirects) {
if (url.pathname.includes(source)) {
if(target == null){
target = new URL(url.href)
}
target = new URL(target.href.replace(source,redirects[source]))
}
}
if (target != null){
return Response.redirect(target,301)
}
}
解决方法
函数结尾:
std::vector
如果 if (target != null){
return Response.redirect(target,301)
}
}
是target
(表示没有重定向匹配),则您不返回任何值。这将产生一个异常(错误1101)。在预览中运行时,JS控制台将显示错误:“未捕获(作为响应)TypeError:无法执行功能:参数1的类型不是'Response'。”
您可能希望将代码更改为:
null
当然,您的工作人员在顶部也需要这个(但我想您只是为了简洁起见就忽略了它):
if (target != null){
return Response.redirect(target,301)
}
return fetch(event.request)
}