123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- 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",//关于我们
- ]
- if(whiteList.includes(parts[0])){
- console.log('白名单路由!允许访问!')
- return true
- }else{
- return false
- }
- }
- }
|