将 nest js 中间件导出到另一个项目

exporting nest js middleware to another project

我正在尝试将 NestJS 中的自定义中间件项目导出到我的所有其他项目(并将其导入所有项目)。我的实际 class 是 acl-jwt.middleware.ts 在其 bootstrap src 文件夹中。

acl-jwt.middleware.ts 我有:

import { Injectable, NestMiddleware,  } from '@nestjs/common';

@Injectable()
export class AclJwtMiddleware implements NestMiddleware {
  use(req: any, res: any, next: () => void) {
    console.log("ACL JWT Middleware !!")
    next();
  }
}

我的 app.module.ts 有:

import { Module, NestModule, MiddlewareConsumer, RequestMethod } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AclJwtMiddleware } from './acl-jwt.middleware';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(AclJwtMiddleware).forRoutes({ path: '*', method: RequestMethod.ALL });
  }
}

并且在我的另一个项目 app.module.ts 中,我正在导入它,如下所示

import { AclJwtMiddleware } from 'mi';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(AclJwtMiddleware).forRoutes({ path: '*', method: RequestMethod.ALL });
  }
}

mi 是我的托管包。

然后当我 运行 我的第二个项目时,我得到以下错误:

src/app.module.ts:16:34 - error TS2307: Cannot find module 'mi' or its corresponding type declarations.

16 import { AclJwtMiddleware } from 'mi';

我不是在导出东西吗?还是我没有正确导入它?

我一直在 Internet 上搜索,但找不到与我的用例相关的内容。任何帮助都会非常好。谢谢你们! :)

您需要确保在 mi 包的 package.json 中,您有 mainfiles 指向正确导出的 file/directory。如果它是一个桶文件,比如 index.js,那么你需要确保它正确导出中间件。