使用@admin-bro/nestjs搭配@admin-bro/sequelize对接MySQL报NoResourceAdapterError怎么办
问题解决步骤
1. 补全适配器注册的完整逻辑
你当前代码缺失AdminBro核心包的导入,且需要确保适配器注册逻辑在所有Admin模块初始化之前执行,修正后的注册代码如下:
import AdminBro from 'admin-bro' import { Database, Resource } from '@admin-bro/sequelize'; import { AdminModule } from '@admin-bro/nestjs'; // 注册逻辑放到App模块代码最顶部,模块声明之前执行 AdminBro.registerAdapter({ Database, Resource });
2. 替换为异步Admin配置获取已初始化的模型
直接导入的User实体类是未绑定Sequelize连接实例的裸类,AdminBro适配器无法识别,需要通过Nest的依赖注入获取已初始化的模型实例,修改AdminModule配置如下:
import { getConnectionToken } from '@nestjs/sequelize'; import { Sequelize } from 'sequelize-typescript'; AdminModule.createAdminAsync({ useFactory: (sequelize: Sequelize) => ({ adminBroOptions: { rootPath: '/admin', resources: [{ resource: sequelize.models.User, options: {} }], } }), inject: [getConnectionToken()] })
3. 检查版本兼容性
- 所有AdminBro相关依赖主版本保持一致:
admin-bro、@admin-bro/nestjs、@admin-bro/sequelize三个包的主版本号必须匹配 - 确保
@admin-bro/sequelize适配你安装的Sequelize版本:Sequelize v6需要使用@admin-bro/sequelize@1.2.0及以上版本
4. 校验模型定义规范
确保User类继承的Model基类是从sequelize-typescript包导入,而非原生sequelize包导入,否则适配器无法识别装饰器定义的模型元数据。
内容的提问来源于stack exchange,提问作者Noman iqbal
相关产品推荐
相关产品推荐

