export default async function (to, from) { //获得全局url const { $webUrl, $CwebUrl } = useNuxtApp(); if (getRouteWhiteList(to.path)) { //如果目标路由是/,或者/404 无需验证 } else { // to是目标路由对象,from是来源路由对象 console.log('进入路由中间件,目标路由:', to.path, "当前路由:", from.path); //拆分目标路由 let parts = parseRoute(to.path) console.log(parts) const responseRoute = await $fetch($webUrl + '/web/checkWebsiteRoute', { headers: { 'Content-Type': 'application/json', 'Userurl': $CwebUrl, 'Origin': $CwebUrl }, query: parts }) console.log(responseRoute) if (responseRoute.code == 200) { //如果路由存在,不做任何操作 } else { return navigateTo('/404') } } } //提取路由 function parseRoute(url) { const parts = url.split('/').filter(Boolean); // 分割并过滤空字符串 const lastPart = parts[parts.length - 1]; // 提取 id(数字.html 的数字部分) const idMatch = lastPart.match(/^(\d+)\.html$/); const id = idMatch ? idMatch[1] : undefined; // 如果最后是数字.html、index.html 或 list-数字.html,则去掉它 const isSpecialRoute = idMatch || lastPart === "index.html" || lastPart.startsWith("list-"); if (isSpecialRoute) { parts.pop(); } let all_route, last_route; // 如果路径以 xiangcunshangcheng 开头 // if (parts[0] === "xiangcunshangcheng") { // if( parts.length > 1){ // if(parts[parts.length - 1] != 'gongying' && parts[parts.length - 1] != 'qiugou'){ // // 否则按原逻辑处理 // all_route = parts.join('/'); // last_route = parts.length > 0 ? parts[parts.length - 1] : null; // }else{ // // all_route = 去掉最后一层 // all_route = parts.slice(0, -1).join('/'); // // last_route = 新的最后一层 // last_route = parts.length > 1 ? parts[parts.length - 2] : null; // } // }else{ // // 否则按原逻辑处理 // all_route = parts.join('/'); // last_route = parts.length > 0 ? parts[parts.length - 1] : null; // } // } else { // // 否则按原逻辑处理 // all_route = parts.join('/'); // last_route = parts.length > 0 ? parts[parts.length - 1] : null; // } all_route = parts.join('/'); last_route = parts.length > 0 ? parts[parts.length - 1] : null; // 返回结果(只有数字.html 时才包含 id) const result = { all_route, last_route }; if (id !== undefined) { result.id = id; } return result; } //获得路由白名单列表 function getRouteWhiteList(path) { if (path == '/') { console.log('白名单路由!允许访问!') //如果用户进入的是首页,直接返回true return true } else { //如果用户进入的不是首页,则需要判断第一层路由是否在白名单 const parts = path.split('/').filter(Boolean); // 分割并过滤空字符串 console.log(parts[0]) let whiteList = [ "404", "search",//搜索页 "xiangcunshangcheng",//乡村商城搜索页 "topic",//商圈 "advertising",//广告 "about",//关于我们 "shukanyinxiang",//书刊音像 ] if (whiteList.includes(parts[0])) { console.log('白名单路由!允许访问!') return true } else { return false } } }