在Next.js API route中获取当前路由

在Next.js API route中获取当前路由,next.js,Next.js,我想访问常规页面和API的当前路由(例如/[user\u id]/posts),以便记录错误、增加页面命中计数器等 我发现检索当前路由的唯一自动化方法是useRouter,但这只能在React组件中访问 我希望避免在每个处理程序中硬编码路由,因为这样很容易失去同步 如何在处理程序中自动检索当前路由?框架根本不支持它。我发现有两种选择: 1/使用其他框架,如Nest.js。使用Nest,您可以访问拦截器中的路由器信息。例如,对于Fastify适配器: @Injectable() 导出类Instru

我想访问常规页面和API的当前路由(例如
/[user\u id]/posts
),以便记录错误、增加页面命中计数器等

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

我希望避免在每个处理程序中硬编码路由,因为这样很容易失去同步


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

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

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

@Injectable()
导出类InstrumentationInterceptor实现NestInterceptor{
拦截(上下文:ExecutionContext,下一步:CallHandler):可观察{
返回next.handle().pipe(
点击(()=>{
const ctx=context.switchToHttp();
log(ctx.getRequest().routerPath);
}),
);
}
}
2/创建自己的控制器基础结构并将元数据附加到每个控制器,例如:

导出类UserController扩展BaseController{
getRoute():字符串{
返回“/user/:userid”;
}
}
请注意,您需要手动使路由与文件结构保持同步。以上内容也可以通过Decorators进行编码


3?/理论上,您可以配置嵌套并使用支持检索路由路径的路由器,并使用钩子检索路由(例如,在中间件期间将其连接到请求对象)。如果你发现自己在这样做,那么看看1/

你所说的“处理者”是什么意思?是否要访问服务器端的当前路由?@juliomalves是。我在服务器端(处理程序/控制器)有一个给定url路径的入口点。当到达该入口点时,我想访问与之匹配的路由。你是说
req.url
返回什么?这可以在
getServerSideProps
和API路由上访问。@juliomalves除了替代param外,其他都可以使用,例如,我得到
/1515/posts
而不是
/[user\u id]/posts
。我的目的是将其用作服务器日志中的聚合密钥,当基数像那样爆炸时,它不起作用