NestJS+TypeORM报错:返回实体/实体数组时找不到模块
NestJS + TypeORM 返回实体时报模块找不到的解决思路
问题重现
用TypeScript开发NestJS应用,搭配TypeORM和MySQL Workbench,仅在执行return this.newsRepository.find()这类返回实体/实体数组的代码时,出现错误:
Cannot find module 'C:/Users/HP/Documents/próba/test-crawler/src/database/entities/news.entity'
移除这段返回代码后,实体能正常导入模块,怀疑TypeORM配置有问题但未解决。
排查与解决步骤
修正TypeORM实体路径配置
别直接用源码路径配置entities,因为运行时Node会找编译后的.js文件。要么改成指向dist目录的路径,要么直接传入实体类:// 错误写法(指向源码) entities: ['src/database/entities/*.entity.ts'] // 正确写法1(指向编译后文件) entities: ['dist/database/entities/*.entity.js'] // 正确写法2(直接传入实体类,最可靠) entities: [NewsEntity]配置位置一般在
app.module.ts的TypeOrmModule.forRoot()里,或者单独的ormconfig.ts文件中。检查tsconfig编译配置
确保tsconfig.json里的outDir和rootDir配置正确,保证编译后的文件结构和源码一致:{ "compilerOptions": { "outDir": "./dist", "rootDir": "./src", "emitDecoratorMetadata": true, "experimentalDecorators": true } }其中
emitDecoratorMetadata和experimentalDecorators是TypeORM识别实体的关键配置,缺失会导致实体解析异常。确认实体文件的导出方式
检查news.entity.ts是否正确导出了实体类:@Entity() export class NewsEntity { // 字段定义... }在模块中导入时,直接用实体类而非字符串路径,避免路径解析出错:
import { NewsEntity } from './database/entities/news.entity'; @Module({ imports: [TypeOrmModule.forFeature([NewsEntity])] }) export class NewsModule {}清理编译缓存
删除项目根目录下的dist文件夹,重新执行npm run build编译,避免旧的编译文件干扰路径解析。
内容的提问来源于stack exchange,提问作者gdorina
相关产品推荐
相关产品推荐

