gpt4 book ai didi

nestjs - 如何将 AWS X-Ray 与 Nest.js 结合使用?

转载 作者:行者123 更新时间:2023-12-04 14:18:54 25 4
gpt4 key购买 nike

AWS X-Ray 支持 Express 和 Restify 中间件,但不支持 Nest.js。
Nest.js 无法打开和关闭 AWSXRay 的段,因为它使用 typescript 装饰进行路由。
如何将 AWS X-Ray 与 Nest.js 结合使用

最佳答案

嗯,这是可能非常有趣且难以处理的情况之一。您当然可以设置 openSegement调用标准的 Nest 中间件(看起来就像 Express 中间件),但是 closeSegment有点困难。我认为(并且我在这里进行了长期尝试,因为我没有真正的方法来测试它)您可以创建一个拦截器并注入(inject) HttpAdapter进入其中,在发出请求之前检查传入路由,看看它是否是您想用 X-Ray 覆盖的路由,如果是,标记一个 bool 值,在可观察响应( next.handle() )中,您可以获得 HttpAdapter实例并拨打 closeSegment功能。换句话说(这将是非常粗糙的代码):

import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { HttpAdapterHost } from '@nesjts/core';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
import * as xRay from 'aws-xray-sdk-express';

@Injectable
export class XRayInterceptor implements NestInterceptor {
constructor(private readonly httpAdapter: HttpAdapterHost) {}

intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
let coverRoute = false;
const req = context.switchToHttp().getRequest();
if (req.path === 'yourPath') {
coverRoute = true;
}
return next.handle()
.pipe(
tap(() => (coverRoute && this.httpAdapter.use(xRay.xrayExpress.closeSegment()))
);
}

您也许还可以设置 openSegment在拦截器中也是如此,但同样,所有这些都未经测试,可能无法按预期工作。我只是想想办法让这成为可能。如果无法访问错误处理中间件,您的选择是查看拦截器和过滤器,似乎 closeSegement是像过滤器一样的错误处理程序,所以我不确定否则你会如何捕捉错误。也许过滤器是最好的方法,你可能只需要从这里开始发挥想法。希望有人可以提供更多的见解。

关于nestjs - 如何将 AWS X-Ray 与 Nest.js 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57175336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com