检查路径名是否为动态路由并在下一个js中重定向用户

问题描述 投票:0回答:1

您好,我的网站使用 next js,我尝试重定向无法访问动态路由的用户。 例如,如果用户想进入 /user/[id] 并且用户未登录,我想将用户重定向到 / 例如我这样做:

    if (pathname === "/profil") {
         router.push("/");
    }

但我想检查路径名是否是动态路由。例如我有这条路线/user/[id](id是uuid)。我尝试这样做:

if (pathname === "/user/[id]")
if (pathname === "/user/*")
if (pathname === "/user/:path*")

但是所有这些方法都不起作用

如果您有解决方案,我谢谢您!

http-redirect next.js routes dynamic path
1个回答
0
投票

我遇到了同样的问题,并意识到 Next.js 没有直接的方法来执行此操作。所以我最终使用了

path-to-regexp
,它与 Next.js 在内部使用的用于解析动态路由的库相同。请参阅下面我所做的示例:

import { match } from 'path-to-regexp';

const PRIVATE_ROUTES = [
  { path: '/account', isDynamic: false },
  { path: '/user/:id', isDynamic: true },
]

const getRouteInfo = (route: string) => {
  return PRIVATE_ROUTES.find((privateRoute) => {
    if (privateRoute.isDynamic) {
      const checkPath = match(privateRoute.path);

      return Boolean(checkPath(route));
    }

    return privateRoute.path === route;
  });
};

基本上,如果路线是动态路线,我们使用

path-to-regexp
来检查路径是否匹配,否则我们进行直接比较。我们现在可以在中间件中调用
getRouteInfo
,如下所示:

const route = getRouteInfo(request.nextUrl.pathname);

if (route) {
  // We know there is a match and we can do whatever we want like checking if user is authenticated etc.
}
© www.soinside.com 2019 - 2024. All rights reserved.