NestJS:解决 NestMiddleware 中的依赖关系?

Posted

技术标签:

【中文标题】NestJS:解决 NestMiddleware 中的依赖关系?【英文标题】:NestJS: Resolving dependencies in NestMiddleware? 【发布时间】:2018-09-01 08:36:36 【问题描述】:

我正在尝试将 express-session 与 NestJS 框架中的 typeorm 存储相结合。因此我写了一个 NestMiddleware 作为 express-session 的包装器(见下文)。当我启动节点时,NestJS 会记录以下内容

错误信息:

UnhandledPromiseRejectionWarning:未处理的承诺拒绝 (拒绝 id:1):错误:Nest 无法解析 会话中间件(?)。请验证 [0] 参数是否可用 在当前上下文中。

Express 没有启动(连接被拒绝),但是创建了 Sqlite DB(应该存储会话)(也是一个会话表,但不是列)。

在我看来,使用 nestjs/typorm-Module 中的 @InjectRepository 解决依赖关系时似乎存在一个特殊问题。有人有提示吗?

代码:

import  Middleware, NestMiddleware, ExpressMiddleware  from '@nestjs/common';
import * as expressSession from 'express-session';

import  InjectRepository  from '@nestjs/typeorm';
import  Repository  from 'typeorm';
import  TypeormStore  from 'connect-typeorm';

import  Session  from './session.entity';

@Middleware()
export class SessionMiddleware implements NestMiddleware 
  constructor(
    @InjectRepository(Session)
    private readonly sessionRepository: Repository<Session>
  ) 

  resolve(): ExpressMiddleware 
    return expressSession(
      store: new TypeormStore( ttl: 86400 ).connect(this.sessionRepository),
      secret: 'secret'
    );
  

【问题讨论】:

【参考方案1】:

这是我的错。在模块中有中间件,但在应用模块级别配置会话中间件。在该级别上缺少以下导入语句:

TypeOrmModule.forFeature([Session])

现在将所有内容移至非应用模块,包括中间件配置。这样就解决了问题。

【讨论】:

以上是关于NestJS:解决 NestMiddleware 中的依赖关系?的主要内容,如果未能解决你的问题,请参考以下文章

解决路径 tsconfig 与 nestjs 有问题

NestJS跨域问题

NestJS 无法解决 JWT_MODULE_OPTIONS 的依赖关系(同样的问题,不同的解决方案)

如何解决 Nestjs 中的“策略#authenticate 必须被子类覆盖”错误

如何在 NestJS 中热重载联邦网关

每个客户端的 NestJs 多租户数据库 - 错误