繁体   English   中英

REQUEST 首次在中间件中使用,但无法从 controller 中检索

[英]REQUEST first used in a middleware but cannot be retrieved from a controller

REQUEST scope 表示为每个请求创建一个新实例,根据 Nest JS 的请求生命周期是:中间件、管道、守卫和拦截器。 我正在一个中间件中创建一个带有 scope REQUEST 的服务,该中间件初始化服务实例的 id,并将这个中间件连接到每个端点,期望在 controller 和以下服务中获取完全相同的服务实例。

但是发现服务实例id是未定义的。 如果我首先在 controller 中使用该服务,那很好:可以从以下服务中获取相同的实例。

这是因为请求生命周期的上下文吗?

服务:

@Injectable({scope: Scope.REQUEST})
export class IdService {
    private _id: string

    get id(): string {
        return this._id;
    }

    set id(value: string) {
        this._id = value;
    }
}

中间件

import {v4 as uuidv4} from 'uuid';

@Injectable()
export class AddIdMiddleware implements NestMiddleware {

    constructor(private idService: IdService) {}

    use(req: any, res: any, next: () => void): any {
        const pid = uuidv4()
        this.idService.id = pid
        console.log(`generated tranceId in idService is: ${this.idService.idd}`)

        next();
    }
}

controller

export class XXXController {
  constructor( private idService: IdService) {}

  @Get("/test")
  public async getId() {
    console.log(`the id generated in the PER-REQUEST scope is ${this.idService.id} !!!!!!!!`)

  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM