【问题标题】:How to use @admin-bro/nestjs with @admin-bro/typeorm and postgres in a right way?如何以正确的方式将@admin-bro/nestjs 与@admin-bro/typeorm 和postgres 一起使用?
【发布时间】:2021-05-24 04:04:12
【问题描述】:

admin-bro-nestjs 存储库包含一个综合示例,其中包含 mongoose 示例。但我需要将它与 typeorm 和 postgres 一起使用。
我尝试将这个示例改编为 typeorm:

// main.ts
import AdminBro from 'admin-bro';
import { Database, Resource } from '@admin-bro/typeorm';
import { NestFactory } from '@nestjs/core';

import { AppModule } from './app.module';

AdminBro.registerAdapter({ Database, Resource });

const bootstrap = async () => {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

和

// app.module.ts
import { Module } from '@nestjs/common';
import { AdminModule } from '@admin-bro/nestjs';
import { TypeOrmModule, getRepositoryToken } from '@nestjs/typeorm';
import { Repository } from 'typeorm';

import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserEntity } from './user/user.entity';

@Module({
  imports: [
    TypeOrmModule.forRoot({
        type: 'postgres',
        host: 'localhost',
        port: 5432,
        username: 'postgres',
        password: 'password',
        database: 'database_test',
        entities: [UserEntity],
        synchronize: true,
        logging: false,
      }),
    AdminModule.createAdminAsync({
      imports: [
        TypeOrmModule.forFeature([UserEntity]),
      ],
      inject: [
        getRepositoryToken(UserEntity),
      ],
      useFactory: (userRepository: Repository<UserEntity>) => ({
        adminBroOptions: {
          rootPath: '/admin',
          resources: [
            { resource: userRepository },
          ],
        },
        auth: {
          authenticate: async (email, password) => Promise.resolve({ email: 'test' }),
          cookieName: 'test',
          cookiePassword: 'testPass',
        },
      }),
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule { }

但在应用程序启动时出现以下错误:

NoResourceAdapterError: There are no adapters supporting one of the resource you provided

有没有人有将所有这些库放在一起的经验?

【问题讨论】:

    标签: node.js postgresql nestjs typeorm admin-bro


    【解决方案1】:

    当我尝试将 AdminBro 与 NestJS/Express/TypeORM 集成时,我也得到了NoResourceAdapterError: There are no adapters supporting one of the resource you provided(尽管我使用的是 MySQL 而不是 Postgres)。 admin-bro-nestjs Github issue which links to this question 中发布的解决方案对我没有帮助。

    对我来说,NoResourceAdapterError 的原因仅仅是UserEntity 没有扩展BaseEntity。 NestJS/TypeORM 似乎可以在不扩展 BaseEntity 的情况下正常工作,但显然它是 AdminBro 所必需的。您可以在AdminBro TypeORM adapter documentation 的示例中看到它。

    这是一个适合我的例子。

    // user.entity
    import { Entity, BaseEntity, Column, PrimaryGeneratedColumn } from 'typeorm';
    
    @Entity()
    export class UserEntity extends BaseEntity{
      @PrimaryGeneratedColumn()
      id: number;
      @Column()
      name: string;
    }
    
    // app.module.ts
    import { Module } from '@nestjs/common';
    import { TypeOrmModule } from '@nestjs/typeorm';
    import { AdminModule } from '@admin-bro/nestjs';
     
    import { Database, Resource } from '@admin-bro/typeorm';
    import AdminBro from 'admin-bro'
    AdminBro.registerAdapter({ Database, Resource });
    
    @Module({
      imports: [
        TypeOrmModule.forRoot({
          // ...
        }),
        AdminModule.createAdmin({
            adminBroOptions: {
              resources: [UserEntity],
              rootPath: '/admin',
            },
        })
      ],
      // ...
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-22
      • 1970-01-01
      • 2020-12-22
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      相关资源
      最近更新 更多