代码之家  ›  专栏  ›  技术社区  ›  Steven Scott

如何将数据注入NestJS拦截器

  •  0
  • Steven Scott  · 技术社区  · 3 年前

    我曾在NestJS中使用过一个拦截器,在那里我可以将数据添加到响应标头中,但我看到的所有示例以及我使用的都是插入静态数据。

    为了处理一些动态数据,我使用了一个硬编码的调用来获取数据,比如我的服务名称和版本,但我希望能够传递数据添加到响应中。

    例如,在对服务进行调用时,可能需要向响应添加HTTP标头,而对后端服务器的服务调用会获取这些数据。理想情况下,我希望能够将这些数据传递到拦截器中,因为我希望继续进行标准的响应处理。

    我当前的拦截器去类中读取package.json中的数据。

    @Injectable()
    export class AddServiceVersionInterceptor implements NestInterceptor {
        intercept(context: ExecutionContext, next: CallHandler): Observable<unknown> {
            const AppInfo:AppService = new AppService();
            const ServiceInfo:string = `${AppInfo.GetName()}/${AppInfo.GetVersion()}`;
    
            const ResponseObj:ExpressResponse = context.switchToHttp().getResponse();
            ResponseObj.setHeader('my-service', ServiceInfo );
    
            return next.handle().pipe();
        }
    }
    

    我希望能够依赖性地注入额外的信息,比如需要添加到响应中的头的列表。我不知道如何将数据传递给NestJS中的inceptor。

    作为一个全局拦截器,我希望能够提供数据,而不是让拦截器调用对后端进行调用的服务,这将是对后端的第二次调用。

    我认为constructor()可能是实现这一点的方法,但由于它是由NestJS填充和创建的,我不确定这是否可行,因为每个路由的数据不同,并且是从后端服务调用返回的。

    0 回复  |  直到 3 年前