首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Nest.js中使用AWS X-Ray?

如何在Nest.js中使用AWS X-Ray?
EN

Stack Overflow用户
提问于 2019-07-24 12:36:29
回答 1查看 1K关注 0票数 4

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

EN

回答 1

Stack Overflow用户

发布于 2019-07-24 14:17:49

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

代码语言:javascript
复制
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将成为一个错误处理程序,就像过滤器一样,所以我不确定否则您将如何捕获错误。也许过滤器是最好的途径,你可能只需要在这里玩弄想法。希望有人能给出更多的见解。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57175336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档