next.js - 在 Next.js API 路由中获取当前路由
问题描述
我想访问/[user_id]/posts
常规页面和 API 的当前路由(例如),以便我可以将其记录在错误中,增加页面命中计数器等。
我发现检索当前路由的唯一自动化方法涉及useRouter
,但这只能在 React 组件中访问。
我想避免在我的每个处理程序中对路由进行硬编码,因为这很容易不同步。
如何在处理程序中自动检索当前路由?
解决方案
框架根本不支持它。我发现有两种选择:
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/。
推荐阅读
- kubernetes - Rancher:能够获取,但不能创建对象( dial tcp [::1]:6443: connect: network is unreachable)
- c++ - length() 函数返回不正确的值,而如果在 C++ 的主函数中实现相同的逻辑,它是否正确?
- css - 如何手动将 Faux Bold 应用于特定字体文件(.ttf)以生成新字体文件(.ttf)
- apache-spark - Big Query 无法将字符串转换为时间戳
- kotlin - 是否可以复制 KClass 并更改其属性?
- debugging - 如何调试 woocommerce 覆盖的文件夹
- scala - 如何从 Source 或 Flow 中的元素生成物化值?
- java - 在Java中存储货币双倍(浮点),没有任何数学,总是准确的吗?
- php - 如何从 htaccess 的重写条件中排除子文件夹规则
- typescript - 打字稿:动态检查第二个参数键在第一个参数上不存在