gpt4 book ai didi

typescript - 在 Nest.js 中记录请求/响应

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

Nest.js 的新手,
我正在尝试实现一个简单的记录器来跟踪 HTTP 请求,例如:

:method :url :status :res[content-length] - :response-time ms

据我了解,最好的地方是 interceptors .但我也使用 Guards如前所述, guard 被触发 之后 中间件,但 之前 拦截器。

意思是,我的禁止访问没有记录。我可以在两个不同的地方写日志部分,但不是。任何的想法?

谢谢!

我的拦截器代码:
import { Injectable, NestInterceptor, ExecutionContext, HttpException, HttpStatus } from '@nestjs/common';
import { Observable, throwError } from 'rxjs';
import { catchError, tap } from 'rxjs/operators';

@Injectable()
export class HTTPLoggingInterceptor implements NestInterceptor {

intercept(context: ExecutionContext, call$: Observable<any>): Observable<any> {
const now = Date.now();
const request = context.switchToHttp().getRequest();

const method = request.method;
const url = request.originalUrl;

return call$.pipe(
tap(() => {
const response = context.switchToHttp().getResponse();
const delay = Date.now() - now;
console.log(`${response.statusCode} | [${method}] ${url} - ${delay}ms`);
}),
catchError((error) => {
const response = context.switchToHttp().getResponse();
const delay = Date.now() - now;
console.error(`${response.statusCode} | [${method}] ${url} - ${delay}ms`);
return throwError(error);
}),
);
}
}

最佳答案

我最终在原始应用程序上注入(inject)了一个经典的记录器。
这个解决方案不是最好的,因为它没有集成到 Nest 流中,但可以很好地满足标准的日志记录需求。

import { NestFactory } from '@nestjs/core';
import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify';
import { ApplicationModule } from './app.module';
import * as morgan from 'morgan';

async function bootstrap() {
const app = await NestFactory.create<NestFastifyApplication>(ApplicationModule, new FastifyAdapter());
app.use(morgan('tiny'));

await app.listen(process.env.PORT, '0.0.0.0');
}

if (isNaN(parseInt(process.env.PORT))) {
console.error('No port provided. 👏');
process.exit(666);
}

bootstrap().then(() => console.log('Service listening 👍: ', process.env.PORT));

关于typescript - 在 Nest.js 中记录请求/响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55093055/

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