NodeJS 在更新现有的枚举值后,更新订单功能在postgres中不起作用?

9njqaruj  于 2024-01-07  发布在  Node.js
关注(0)|答案(1)|浏览(168)

我有一个nestjs应用程序,typeOrmpostgres作为数据库。我在Vercel上托管了我的数据库。在这个应用程序中,我有一个带有一些字段的订单实体。我有一个status列,其中enum先前具有以下值

  • 未决
  • 供应商
  • 出动

后来,我通过修改名为“order_status_enum”的状态列类型,在这个枚举中添加了另外两个状态,并添加了以下状态

  • 交付
  • 返回

现在,当我试图更新订单状态,以任何新添加的状态,即返回,交付,所以它抛出这个错误

exception:  BadRequestException: Bad Request Exception
0|cwc-nest-server  |     at ValidationPipe.exceptionFactory 
(/home/ubuntu/servers/cwc- 
nest/node_modules/@nestjs/common/pipes/validation.pipe.js:99:20)
0|cwc-nest-server  |     at ValidationPipe.transform (/home/ubuntu/servers/cwc- 
nest/node_modules/@nestjs/common/pipes/validation.pipe.js:72:30)
0|cwc-nest-server  |     at processTicksAndRejections 
(node:internal/process/task_queues:93:5)
0|cwc-nest-server  |     at resolveParamValue (/home/ubuntu/servers/cwc- 
nest/node_modules/@nestjs/core/router/router-execution-context.js:147:23)
0|cwc-nest-server  |     at async Promise.all (index 0)
0|cwc-nest-server  |     at pipesFn (/home/ubuntu/servers/cwc- 
nest/node_modules/@nestjs/core/router/router-execution-context.js:150:13)
0|cwc-nest-server  |     at /home/ubuntu/servers/cwc-                
nest/node_modules/@nestjs/core/router/router-execution-context.js:37:30 {
0|cwc-nest-server  |   response: {
0|cwc-nest-server  |     statusCode: 400,
0|cwc-nest-server  |     message: [ 'Invalud order status type' ],
0|cwc-nest-server  |     error: 'Bad Request'
0|cwc-nest-server  |   },
0|cwc-nest-server  |   status: 400,
0|cwc-nest-server  |   options: {}
0|cwc-nest-server  | }
0|cwc-nest-server  | request method: PUT request url/api/v1/orders/1             
request method: PUT request url/api/v1/orders/1 {"statusCode":400,"timestamp":"2023-12-27T20:47:37.094Z","path":"/api/v1/orders/1","method":"PUT","errorName":"BadRequestException","message":"Bad Request Exception"}

字符串

注意:我在vercel remote db中的enum类型是这样的


的数据

产品代码:

这是我的订单实体

@Entity('orders')
export class Order extends BaseEntity {
  @PrimaryGeneratedColumn('increment')
  id: number;

  @Column({
    length: 500,
  })
  description: string;

  @Column({
    nullable: true,
  })
  quantity: number;

  @Column({
    nullable: false,
  })
  amount: number;

  @ManyToOne(() => Customer, (customer) => customer.orders)
  customer: Customer;

  @OneToMany(() => OrderProduct, (orderProduct) => orderProduct.order, {
    cascade: true,
  })
  @JoinTable()
  products: Array<OrderProduct>;

  @Column({
    nullable: false,
    type: 'enum',
    enum: OrderStatus,
    default: OrderStatus.PENDING,
  })
  status: OrderStatus;

  @CreateDateColumn()
  createdAt: Date;
}


下面是我的OrderStatus枚举

更新前:

export enum OrderStatus {
  PENDING = 'pending',
  VENDOR = 'vendor',
  DISPATCHED = 'dispatched'
}

更新后:

export enum OrderStatus {
  PENDING = 'pending',
  VENDOR = 'vendor',
  DELIVERED = 'delivered',
  DISPATCHED = 'dispatched',
  RETURNED = 'returned',
}


我的UpdateOrderDTO

export class UpdateOrderDto {
  @IsString()
  @IsNotEmpty()
  @Length(5, 400)
  @IsOptional()
  public description: string;

  @IsNotEmpty()
  @IsNumber()
  @IsPositive()
  @IsOptional()
  public amount: number;

  @IsNotEmpty()
  @IsNumber()
  @IsOptional()
  public customerId: number;

  @IsNotEmpty()
  @IsArray()
  @IsOptional()
  @ValidateNested({ each: true })
  @Type(() => OrderProductDto)
  products: OrderProductDto[];

  @IsOptional()
  @IsEnum(OrderStatus, { message: 'Invalud order status type' })
  public status: OrderStatus;
}

cpjpxq1n

cpjpxq1n1#

我能够解决上述问题。问题是,我已经在AWS EC2示例上部署了我的nestjs应用程序。所以,在我所做的实际代码中更新了枚举之后,我只是用pm2停止了服务器应用程序,从相关的分支中获取最新的,然后再次用pm2重新启动应用程序。问题是,服务器应用程序正在使用有关OrderStatusEnum的旧元数据,因为我只是提取了最新的代码,但我没有删除dist文件夹并重新构建应用程序。我通过以下步骤解决了这个问题:

  • 在EC2示例上,使用pm2停止嵌套应用程序
  • 从相关分支中提取最新代码
  • 使用npm run build构建Nest应用程序
  • 使用pm2再次启动nest应用程序

相关问题