【发布时间】:2023-03-19 01:01:01
【问题描述】:
嘿嘿,
我正在尝试使用 NestJS + TypeORM 为一种电子商务网站构建后端。
我需要我的订单和产品表之间的 m:n 关系。悬停,因为我需要数据透视表中的一些自定义字段,所以我查找了 typeorms 文档,并且如前所述,我需要创建一个我已经完成的新实体。现在我在启动我的 NestJS 应用程序时遇到错误:
Error: Entity metadata for Product#productToOrders was not found. Check if you specified a correct entity object and if it's connected in the connection options.
我的 product.entity.ts:
import { BaseEntity, Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm";
import { ProductToOrder } from "./productToOrder.entity";
@Entity()
export class Product extends BaseEntity{
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
description: string;
@Column()
price: number;
@OneToMany(type => ProductToOrder, productToOrder => productToOrder.product)
productToOrders: ProductToOrder[];
}
我的 productToOrder.entity.ts
import { Order } from "src/order/order.entity";
import { BaseEntity, Column, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm";
import { Product } from "./product.entity";
@Entity()
export class ProductToOrder extends BaseEntity{
@PrimaryGeneratedColumn()
id: number;
@Column()
amount: number;
@ManyToOne(() => Product, product => product.productToOrders,{eager: false})
product: Product;
@ManyToOne(() => Order, order => order.productToOrders, {eager: false})
order: Order;
}
我的 order.entity.ts
import { User } from "src/auth/user.entity";
import { Product } from "src/product/product.entity";
import { ProductToOrder } from "src/product/productToOrder.entity";
import { BaseEntity, Column, Entity, JoinTable, ManyToMany, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm";
@Entity()
export class Order extends BaseEntity{
@PrimaryGeneratedColumn()
id: number;
@Column()
ordernumber: number;
@Column()
totalprice: number;
@ManyToOne(type => User, user => user.orders, {eager: false})
user_id: User[];
@OneToMany(() => ProductToOrder, productToOrder => productToOrder.order, {eager: true})
productToOrders: ProductToOrder[];
}
我的目录结构:
src/
├── order
│ ├── order.entity.ts
│ ├── order.module.ts
│ ├── order.service.ts
│ ├── order.controller.ts
│ └── order.repository.ts
├── product
│ ├── product.entity.ts
│ ├── product.module.ts
│ ├── product.service.ts
│ ├── product.controller.ts
│ ├── productToOrder.entity.ts <- i put the entity for the pivot table here, not sure if its right
│ └── product.repository.ts
└── xy
我的 app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AuthModule } from './auth/auth.module';
import { typeOrmConfig } from './config/typeorm.config';
import { ProductModule } from './product/product.module';
import { OrderModule } from './order/order.module';
@Module({
imports: [
TypeOrmModule.forRoot(typeOrmConfig),
AuthModule,
ProductModule,
OrderModule,
],
controllers: [],
providers: [],
})
export class AppModule {}
我的 typeorm.config.ts
import { TypeOrmModuleOptions } from "@nestjs/typeorm";
import * as config from 'config';
const dbConfig = config.get('db');
export const typeOrmConfig: TypeOrmModuleOptions = {
type: dbConfig.type,
host: dbConfig.host,
port: dbConfig.port,
username: dbConfig.username,
password: dbConfig.password,
database: dbConfig.database,
autoLoadEntities: true,
synchronize: dbConfig.synchronize,
}
如果我添加了
entities: ["dist/**/*.entity{.ts,.js}"],
到我的 typeorm.config.ts 并使用 npm run start:dev 启动应用程序,错误代码更改为
TypeError: metatype is not a constructor
【问题讨论】:
标签: typescript postgresql nestjs typeorm