如何在 Nest.js 装饰器中发出数据库请求?

Try*_*yam 7 node.js typescript nestjs

我想通过请求参数查找表行。我知道如何在服务中做到这一点,但我也在尝试在装饰器中做到这一点。

我的装饰师:

import { BadRequestException, createParamDecorator, ExecutionContext } from '@nestjs/common';

export const GetEvent = createParamDecorator((data: unknown, ctx: ExecutionContext) => {
  const request = ctx.switchToHttp().getRequest();
  const { eventId } = request.params;
  // Something like in service:
  // const event = await this.eventModel.findByPk(eventId);
  // return event;
});
Run Code Online (Sandbox Code Playgroud)

我知道不可能在装饰器中注入服务,但在调用服务方法之前可能需要一些技巧来发出数据库请求?

Jay*_*iel 8

理论上,您可以直接使用 pacakge(就像如果您使用 TypeORM 则可以使用该typeorm包),但有一些注意事项:

  1. 装饰器确实不应该调用数据库,这会导致疯狂困难的堆栈跟踪
  2. 装饰器方法不能是异步的,因此您需要回调,而装饰器不能很好地使用回调
  3. 查询数据库确实应该在控制器或服务中完成。只是一个最佳实践。