簡體   English   中英

nestjs 無法在自定義裝飾器中注入依賴項

[英]nestjs can't inject dependency in custom decorator

在有關授權的官方文檔中,我遵循本指南並使用casl lib

假設如果我想驗證請求 man 是一篇文章的所有者,我必須從數據庫中獲取文章數據,並在userarticle.userId之間比較userId ,所以我必須像這樣注入一個 repoistory 依賴項

@Injectable()
export class DeleteHolePolicyHandler implements IPolicyHandler {
  @Inject()
  private readonly treeholeDaoService: TreeholeDaoService

  async handle(ability: AppAbility, req: Request) {
    const hole = await this.treeholeDaoService.findById(req.body.id)

    return res
  }
}

但我收到一個錯誤,它顯示this.treeholeDaoService未定義。

那么我應該怎么做才能讓它工作呢?

這是復制鏈接

您不能注入依賴項,因為它是使用 new 聲明的就地屬性。 文檔中所述:

由於我們必須使用 new 關鍵字就地實例化策略處理程序, ReadArticlePolicyHandler class 不能使用依賴注入。 這可以通過ModuleRef#get方法解決(在此處閱讀更多內容)。 基本上,您必須允許傳遞一個Type<IPolicyHandler> ,而不是通過@CheckPolicies()裝飾器注冊函數和實例。 然后,在您的守衛內部,您可以使用類型引用檢索實例: moduleRef.get(YOUR_HANDLER_TYPE) ,甚至可以使用 ModuleRef#create 方法動態實例化它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM