呵呵,
我试图使用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.
我的产品。实体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[];
}
我的产品订购了。实体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
我的应用程序。单元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 {}
我的打字机。配置。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}"],
和我的打字机一致。配置。ts并使用npm启动应用程序run start:dev将错误代码更改为
TypeError: metatype is not a constructor
也许您没有将ProductToOrder实体添加到productModule?
@Module({
imports: [TypeOrmModule.forFeature([Product, ProductToOrder])],
})
export class ProductModule {}
好吧,问题不是我的类型配置,也不是我的实体。
问题是我的PassportJS中间件。在我的order.controller.ts
看起来是这样的:
import { Body, Controller, Post, UseGuards, UsePipes, ValidationPipe } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { GetUser } from 'src/auth/get-user.decorator';
import { User } from 'src/auth/user.entity';
import { CreateOrderDto } from './dto/create-order.dto';
import { OrderService } from './order.service';
@Controller('order')
@UseGuards(AuthGuard)
export class OrderController {
constructor(
private orderService: OrderService,
){}
@Post()
@UsePipes(ValidationPipe)
createProduct(
@Body(ValidationPipe) createdto: CreateOrderDto,
@GetUser() user: User,
){
return this.orderService.createOrder(createdto, user);
}
}
正如你所看到的,我缺少括号
@UseGuards(AuthGuard)
室内装修设计师它应该是什么样子的:
@UseGuards(AuthGuard()) //<-- Missing brackets
我在这里找到了这个解决方案的灵感:https://github.com/nestjs/nest/issues/2399
在TypeORM配置中,您必须定义了实体
属性:
TypeOrmModule.forRoot({
// ...
entities: ['src/**/*.entity.ts']
})
检查模式是否也与新实体匹配。
问题内容: 我正在使用jackson库将JSON映射到对象中。我已经简化了问题 很多 ,这是发生了什么: 我正在解析一个空的JSON字符串: 在上,出现以下异常: 当我在类中有 两个 返回a的方法时,就会发生这种情况。删除其中一种方法不会导致异常。 实际上,我对映射器查看方法的事实感到惊讶,它应该设置我指示的字段。 这是怎么回事 问题答案: 我通过将转换为来解决此问题:
我在我的tomcat日志中看到以下错误... 未找到 Java 类的邮件正文读取器和 Java 类型类“多部分”和“表”多部分“和”MIME 媒体类型多部分/表单数据“。与 MIME 媒体类型兼容的已注册邮件正文读取器包括:/ - 在客户端,我看到以下消息: 邮政https://dev.project.org/upload返回了415不支持的媒体类型的响应状态。 我已经搜索了一下,建议是球衣多部分
问题内容: 我已经为此厌倦了很长时间。我不知道是什么原因导致此错误。这是我的文件: Uzytkownik.hbm.xml hibernate.cfg.xml: 我使用的是MySQL 5.5。 我收到以下错误: 这是我的课程:main.java Uzytkownik.java: HibernateUtil.java: 问题答案: 也许您的映射文件不完整,但其他方面应该是: =>需要设置完全合格的类名
问题内容: 我正在尝试简单的Jersey + JSON示例,但出现以下错误 我放入以下jar文件以获得适当的结果 为什么会出现此类错误?错误日志在这里: web.xml JsonExample.java 和Json服务 如果我做错了事,请提出建议。 问题答案: 此问题已通过jersey-bundle-1.8.jar修复
我在使用JAX-RS服务作为JSON时遇到了一些问题。
我正在使用TypeORM和NestJs处理现有的MySql数据库。有一个共享表,我必须将记录插入其中,它有一个自动递增的主键。由于该表是共享的,因此已禁用“同步”。 当我使用@PrimaryGeneratedColumn装饰器设置TypeForm实体时,我得到一个错误,指出该列“没有默认值”。如果我将decorator更改为@Column,那么我将收到一个关于没有主键的错误。 谁能告诉我应该如何设