gpt4 book ai didi

javascript - 将nestjs与哨兵集成

转载 作者:行者123 更新时间:2023-12-04 02:43:26 32 4
gpt4 key购买 nike

我想将 sentry 与 nest.js + express 集成,但我刚刚找到了 raven 版本,但已弃用。
我按照哨兵文档与 express 集成,但不知道如何处理“所有 Controller 都应该住在这里”部分。

const express = require('express');
const app = express();
const Sentry = require('@sentry/node');

Sentry.init({ dsn: 'https://5265e36cb9104baf9b3109bb5da9423e@sentry.io/1768434' });

// The request handler must be the first middleware on the app
app.use(Sentry.Handlers.requestHandler());

**// All controllers should live here
app.get('/', function rootHandler(req, res) {
res.end('Hello world!');
});**

// The error handler must be before any other error middleware and after all controllers
app.use(Sentry.Handlers.errorHandler());

// Optional fallthrough error handler
app.use(function onError(err, req, res, next) {
// The error id is attached to `res.sentry` to be returned
// and optionally displayed to the user for support.
res.statusCode = 500;
res.end(res.sentry + "\n");
});

app.listen(3000);

最佳答案

我刚刚在 Github 上创建了一个示例项目来回答这个问题:
https://github.com/ericjeker/nestjs-sentry-example
下面是 README 文件的部分副本。如果您有任何问题,请告诉我。
创建所需的元素
创建 Sentry 模块、服务和拦截器

$ nest g module sentry
$ nest g service sentry
$ nest g interceptor sentry/sentry
哨兵模块
创建 SentryModule.forRoot()方法并添加 Sentry.init(options)在里面。
调用 SentryModule.forRoot({...})AppModule并与您的首选配置集成(我使用 ConfigModule.env 文件)。
AppModule.configure() 中添加对 Express requestHandler 中间件的调用.
  configure(consumer: MiddlewareConsumer): void {
consumer.apply(Sentry.Handlers.requestHandler()).forRoutes({
path: '*',
method: RequestMethod.ALL,
});
}
使用该中间件很重要,否则当前的 Hub 将是全局的,并且
当 Sentry 通过线程创建 Hub 并且 Node.js 不是多线程时,您将遇到冲突。
哨兵服务
我们要在服务的构造函数中初始化事务。你可以
在那里定制您的主要交易。
请注意,因为我注入(inject)了 Express 请求,所以服务必须是请求范围的。你
可以阅读更多关于 here .
@Injectable({ scope: Scope.REQUEST })
export class SentryService {
constructor(@Inject(REQUEST) private request: Request) {
// ... etc ...
}
}
哨兵拦截器 SentryInterceptor将捕获异常并完成事务。还请
请注意,当我们注入(inject) SentryService 时,它必须是请求范围的。 :
@Injectable({ scope: Scope.REQUEST })
export class SentryInterceptor implements NestInterceptor {
constructor(private sentryService: SentryService) {}

intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
// ... etc ...
}
}
例如,我添加了一个跨度。这不是必需的,但它只会使 Sentry 的性能查看器中的跟踪更好。
只需注入(inject) SentryService,您就可以在应用程序的任何位置添加更多跨度。并调用 startChild或直接调用 startChild当前跨度的方法。

关于javascript - 将nestjs与哨兵集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58239364/

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