I get expetion
No metadata for "MessageModel" was found.
2024-05-10 18:09:51 EntityMetadataNotFoundError: No metadata for "MessageModel" was found.
2024-05-10 18:09:51 at DataSource.getMetadata (/app/node_modules/typeorm/data-source/DataSource.js:304:19)
2024-05-10 18:09:51 at get metadata [as metadata] (/app/node_modules/typeorm/repository/Repository.js:15:40)
2024-05-10 18:09:51 at Repository.find (/app/node_modules/typeorm/repository/Repository.js:213:39)
2024-05-10 18:09:51 at MessagesService.findAll (/app/dist/messages/messages.service.js:34:45)
2024-05-10 18:09:51 at MessagesController.findAll (/app/dist/messages/messages.controller.js:27:42)
2024-05-10 18:09:51 at /app/node_modules/@nestjs/core/router/router-execution-context.js:38:29
2024-05-10 18:09:51 at InterceptorsConsumer.intercept (/app/node_modules/@nestjs/core/interceptors/interceptors-consumer.js:12:20)
2024-05-10 18:09:51 at /app/node_modules/@nestjs/core/router/router-execution-context.js:46:60
2024-05-10 18:09:51 at /app/node_modules/@nestjs/core/router/router-proxy.js:9:23
2024-05-10 18:09:51 at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
My docker-compose file
version: '3.9'
services:
postgres:
image: postgres:16.3
ports:
- ${DB_PORT}:${DB_PORT}
environment:
- POSTGRES_DB=${DB_NAME}
- POSTGRES_USER=${DB_USERNAME}
- POSTGRES_PASSWORD=${DB_PASSWORD}
networks:
- postgresN
volumes:
- db-data:/etc/data
app:
build: .
depends_on:
- postgres
networks:
- postgresN
ports:
- ${PORT}:${PORT}
networks:
postgresN:
volumes:
db-data:
My dockerfile
FROM node:20.12.2-alpine
WORKDIR /app
COPY . .
EXPOSE 4000
RUN npm install
RUN npm run build
CMD node ./dist/main.js
My app module
import { Module } from '@nestjs/common';
import { MessagesModule } from './messages/messages.module';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { getPgConfig } from './configs/postgres.config';
import { MessageModel } from './messages/message.model.ts/message.entity';
@Module({
imports: [
ConfigModule.forRoot(),
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (configService: ConfigService) => {
return getPgConfig(configService, [MessageModel]);
},
}),
MessagesModule,
],
})
export class AppModule {}
Message module
import { Module } from '@nestjs/common';
import { MessagesController } from './messages.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { MessagesService } from './messages.service';
import { MessageModel } from './message.model.ts/message.entity';
@Module({
imports: [TypeOrmModule.forFeature([MessageModel])],
controllers: [MessagesController],
providers: [MessagesService],
})
export class MessagesModule {}
The entity
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class MessageModel {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
title: string;
@Column()
text: string;
}
It works if I run localy, no exeptions, works how I expect, but when I use docker, it throw the exeption above.
What I can do?
I tryed to use:
entities: [__dirname + '/../**/*.entity.js']
entities: [__dirname + '/../**/*.entity.{js,ts}']
entities: [MessageModel]
imports: [UserModule,
TypeOrmModule.forRoot({
autoLoadEntities: true
})
]
So I don't know what I should use... In docker container all files are there.
I've found the problem. The problem is in my docker image. I delete only containers forgotten about layers in it. There were no entities till I add one, so it uses code I used before.
Deliting whole container and image I solved the problem.