您好,我的网站使用 next js,我尝试重定向无法访问动态路由的用户。 例如,如果用户想进入 /user/[id] 并且用户未登录,我想将用户重定向到 / 例如我这样做:
if (pathname === "/profil") {
router.push("/");
}
但我想检查路径名是否是动态路由。例如我有这条路线/user/[id](id是uuid)。我尝试这样做:
if (pathname === "/user/[id]")
if (pathname === "/user/*")
if (pathname === "/user/:path*")
但是所有这些方法都不起作用
如果您有解决方案,我谢谢您!
我遇到了同样的问题,并意识到 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.
}