如何在Nestjs集成哨兵
#网络开发人员 #node #nestjs #sentry

大家好,你好吗?由于Sentry没有对Nestjs框架的本机支持,因此我创建了有关如何集成它的分步指南。有一些使用Nest的拦截器使用的教程,但是正确的方法是使用异常,因为Sentry仅捕获异常,并且它使代码更容易和更易于配置ð

1。首先,在nodejs

中创建一个项目

Sentry page to create a project

2。保存在DNS部分中生成的URL:

Location in Sentry to get the DNS URL

3。安装依赖项

yarn add @sentry/node @sentry/tracing

// or

npm install @sentry/node @sentry/tracing

4。在包含项目URL的.env文件中包含一个sentry_dns键:

生成项目后,使用步骤2中获得的URL

SENTRY_DNS=https://xxx@xxx.ingest.sentry.io/xxx

5。创建一个异常

我们将创建 exceptionfilter 内巢中。为此,在src文件夹中包含一个名为sentry.filter.ts的文件,其中包含以下内容:

import { Catch, ArgumentsHost } from '@nestjs/common';
import { BaseExceptionFilter } from '@nestjs/core';
import * as Sentry from '@sentry/node';


@Catch()
export class SentryFilter extends BaseExceptionFilter {
  catch(exception: unknown, host: ArgumentsHost) {
    Sentry.captureException(exception);
    super.catch(exception, host);
  }
}

我们正在生成通用 exceptionfilter ,它捕获任何类型的 exception ,因为 <> > @catch() 装饰器是空的。另外,我们将其从 baseexceptionfilter 进行扩展,这是Nest的默认类用于处理异常。因此,当抛出异常时,我们不会更改原始行为,因为在代码末尾处理了处理异常的父类方法: super.catch(exception,host);

6。在Nest的Main.ts

中包括哨兵脚本

现在只需调用哨兵初始化方法,并导入全球创建的 exceptionfilter 在您的 main.ts.ts 文件中 bootstrap() 方法:

// other importers
import { HttpAdapterHost, NestFactory } from '@nestjs/core';
import * as Sentry from '@sentry/node';
import { SentryFilter } from './filters/sentry.filter';


async function bootstrap() {
  // …
  // Initialize Sentry by passing the DNS included in the .env
  Sentry.init({
    dsn: process.env.SENTRY_DNS,
  });


  // Import the filter globally, capturing all exceptions on all routes
  const { httpAdapter } = app.get(HttpAdapterHost);
  app.useGlobalFilters(new SentryFilter(httpAdapter));

  // …
}


bootstrap();

完成!配置完成ðð。这样,我们正在捕获系统中的所有异常,但是您可以自定义 exceptionfilter 以阻止并仅获得特定的异常。

参考

哨兵docs node.js:https://docs.sentry.io/platforms/node/
exceptionfilters nestjs:https://docs.nestjs.com/exception-filtersHi家伙,你好吗?由于Sentry没有对Nestjs框架的本机支持,因此我创建了有关如何集成它的分步指南。有一些使用Nest的拦截器使用的教程,但是正确的方法是使用异常,因为Sentry仅捕获异常,并且它使代码更容易和更易于配置ð

1。首先,在nodejs

中创建一个项目

Sentry page to create a project

2。保存在DNS部分中生成的URL:

Location in Sentry to get the DNS URL

3。安装依赖项

yarn add @sentry/node @sentry/tracing

// or

npm install @sentry/node @sentry/tracing

4。在包含项目URL的.env文件中包含一个sentry_dns键:

生成项目后,使用步骤2中获得的URL

SENTRY_DNS=https://xxx@xxx.ingest.sentry.io/xxx

5。创建一个异常

我们将创建 exceptionfilter 内巢中。为此,在src文件夹中包含一个名为sentry.filter.ts的文件,其中包含以下内容:

import { Catch, ArgumentsHost } from '@nestjs/common';
import { BaseExceptionFilter } from '@nestjs/core';
import * as Sentry from '@sentry/node';


@Catch()
export class SentryFilter extends BaseExceptionFilter {
  catch(exception: unknown, host: ArgumentsHost) {
    Sentry.captureException(exception);
    super.catch(exception, host);
  }
}

我们正在生成通用 exceptionfilter ,它捕获任何类型的 exception ,因为 <> > @catch() 装饰器是空的。另外,我们将其从 baseexceptionfilter 进行扩展,这是Nest的默认类用于处理异常。因此,当抛出异常时,我们不会更改原始行为,因为在代码末尾处理了处理异常的父类方法: super.catch(exception,host);

6。在Nest的Main.ts

中包括哨兵脚本

现在只需调用哨兵初始化方法,并导入全球创建的 exceptionfilter 在您的 main.ts.ts 文件中 bootstrap() 方法:

// other importers
import { HttpAdapterHost, NestFactory } from '@nestjs/core';
import * as Sentry from '@sentry/node';
import { SentryFilter } from './filters/sentry.filter';


async function bootstrap() {
  // …
  // Initialize Sentry by passing the DNS included in the .env
  Sentry.init({
    dsn: process.env.SENTRY_DNS,
  });


  // Import the filter globally, capturing all exceptions on all routes
  const { httpAdapter } = app.get(HttpAdapterHost);
  app.useGlobalFilters(new SentryFilter(httpAdapter));

  // …
}


bootstrap();

完成!配置完成ðð。这样,我们正在捕获系统中的所有异常,但是您可以自定义 exceptionfilter 以阻止并仅获得特定的异常。

参考

哨兵docs node.js:https://docs.sentry.io/platforms/node/
exceptionfilters nestjs:https://docs.nestjs.com/exception-filters