首页 > 解决方案 > 在 Next.js API 路由中获取当前路由

问题描述

我想访问/[user_id]/posts常规页面和 API 的当前路由(例如),以便我可以将其记录在错误中,增加页面命中计数器等。

我发现检索当前路由的唯一自动化方法涉及useRouter,但这只能在 React 组件中访问。

我想避免在我的每个处理程序中对路由进行硬编码,因为这很容易不同步。

如何在处理程序中自动检索当前路由?

标签: next.js

解决方案


框架根本不支持它。我发现有两种选择:

1/ 使用其他框架,例如 Nest.js。使用 Nest,您可以在拦截器中访问路由器信息。例如使用 Fastify 适配器:

@Injectable()
export class InstrumentationInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler): Observable<unknown> {
    return next.handle().pipe(
      tap(() => {
        const ctx = context.switchToHttp();
        console.log(ctx.getRequest().routerPath);
      }),
    );
  }
}

2/ 创建您自己的控制器基础架构并将元数据附加到每个控制器,例如:

export class UserController extends BaseController {
  getRoute(): string {
    return "/user/:userid";
  }
}

请注意,您需要手动保持路由与文件结构同步。以上也可以通过装饰器进行编码。

3?/理论上你可以在 Nest 中配置一个自定义服务器,并使用一个支持检索路由路径的路由器,用一个钩子让你检索路由(例如,在中间件期间将其附加到请求对象)。如果您发现自己这样做了,请查看 1/。


推荐阅读