【问题标题】:Nestjs - Inject Data In DecoratorNestjs - 在装饰器中注入数据
【发布时间】:2021-12-30 17:36:39
【问题描述】:
class CreateAssetDto{
  assetName: string;
  tenant: Tenant;
}

export const InjectTenant = createParamDecorator(
    (data: string, ctx: ExecutionContext) => {
      const request = ctx.switchToHttp().getRequest();
      let createAssetDto = new CreateAssetDto();
      createAssetDto.tenant = new Tenant("JAY")
      return createAssetDto;
    }

);

async create(@InjectTenant() createAssetDto: CreateAssetDto) {
    console.log(createAssetDto.tenant);

您好,如何使用装饰器参数注入数据。例如每次我调用创建函数。它会自动注入租户属性。

当我尝试它时。它从不调用@InjectTenant 装饰器

【问题讨论】:

  • 使用data 参数? @InjectTenant('foo') 然后data === 'foo'

标签: nestjs decorator inject


【解决方案1】:

你可以把它注入到请求中,这样你就可以随心所欲地获取对象了……看看下面的代码

export const InjectTenant = createParamDecorator(
(data: string, ctx: ExecutionContext) => {
  const request = ctx.switchToHttp().getRequest(); 
  let createAssetDto = new CreateAssetDto();
  createAssetDto.assetName = "CAR"
  request.createAssetDto = createAssetDto;
  return request;
}
);

现在在您的控制器中,您可以通过Req() 方法访问它

@InjectTenant()
@Post('/Your-Route')
async create(@Body() createAssetDto: CreateAssetDto, @Req() req:any ) {
console.log(req.createAssetDto);
}

【讨论】:

  • 如果我想注入对象 createAssetDto。不使用@req 或新属性
  • 我认为没有简单的方法可以做到这一点。除了官方文档使用这种方法。使用 request 也将有助于访问其他地方的对象。希望它有所帮助:)
猜你喜欢
  • 2022-08-13
  • 2021-01-30
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 2021-11-25
  • 2018-07-27
  • 1970-01-01
  • 2021-01-20
相关资源
最近更新 更多