如何正确使用@admin-bro/nestjs和@admin-bro/typeorm和postgres? [英] How to use @admin-bro/nestjs with @admin-bro/typeorm and postgres in a right way?
本文介绍了如何正确使用@admin-bro/nestjs和@admin-bro/typeorm和postgres?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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
有人有将所有这些库组合在一起的经验吗?
推荐答案
当我尝试将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',
},
})
],
// ...
})
这篇关于如何正确使用@admin-bro/nestjs和@admin-bro/typeorm和postgres?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文