2

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

错误信息:

UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝 id:1):错误:Nest 无法解析 SessionMiddleware (?) 的依赖项。请验证 [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'
    });
  }
}
4

1 回答 1

2

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

TypeOrmModule.forFeature([Session])

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

于 2018-03-22T19:42:51.770 回答