【问题标题】:Sequelize typescript Doesn't save data to table size and logs connected to the model via HasOne & HasManySequelize typescript 不将数据保存到表大小和通过 HasOne 和 HasMany 连接到模型的日志
【发布时间】:2021-11-15 17:13:11
【问题描述】:

描述的表模型“错误”,需要一个字段日志,一个日志数组将存储在表单中

[
 {x: 100, y: 1000},
 //.....
]

还有对象:

{
 key: ""
}

服务

  async addError(errorDto: ErrorDto, origin: string) {
    const saveData: ICreatError = {...errorDto, project: ''}
    if (errorDto.logs) saveData.logs = errorDto.logs.map(({x, y}: {x: number, y:number}) => ({x, y}))

    if (!origin && errorDto.project) saveData.project = errorDto.project
    else if (/'secret'/.test(origin)) saveData.project = 'secret'
    else if (/secret/.test(origin)) saveData.project = 'secret'
    else if (/secret/.test(origin)) saveData.project = 'secret'
    else if (/secret/.test(origin)) saveData.project = 'secret'

    try {
      return this.errorModel.create(saveData)
    } catch (err) {
      throw new HttpException('Error model save', HttpStatus.NOT_ACCEPTABLE);
    }
  }

模型错误

import {
  AllowNull,
  AutoIncrement,
  Column,
  DataType,
  HasMany, HasOne,
  Model,
  PrimaryKey,
  Table,
  Unique
} from "sequelize-typescript";
import {ApiProperty} from "@nestjs/swagger";
import {ILog, Log} from "@/models/error/log.model";
import {ICreateSize, Size} from "@/models/error/size.model";

export type Type = 'front' | 'back'
export type Project = 'secret' | 'secret' | 'secret' | 'secret' | ''

export interface ICreatError {
  error: string
  errorInfo: string
  function: string
  component: string
  logs: ILog[]
  project: Project
  href: string
  type: Type
  size?: ICreateSize
}

@Table({tableName: 'error'})
export class Error extends Model<Error, ICreatError> {
  @ApiProperty({example: 1})
  @Unique
  @AutoIncrement
  @PrimaryKey
  @Column({type: DataType.INTEGER})
  _id: number

  @ApiProperty({required: true, example: `Page: https://www.secret.com/directory Function: API middleware()
Logs:

[Front end]
Error: Request failed with status code 401`})
  @AllowNull
  @Column({type: DataType.STRING})
  error: string

  @ApiProperty()
  @Column({type: DataType.STRING})
  errorInfo: string

  @ApiProperty({example: 'handler()'})
  @Column({type: DataType.STRING})
  function: string

  @ApiProperty({example: 'resources/js/Pages/Main/Faq/Item.tsx'})
  @Column({type: DataType.STRING})
  component: string

  @ApiProperty({example: '#Max'})
  @Column({type: DataType.STRING})
  author: string

  @ApiProperty({example: [{content:'',tag:'DIV','class':'980',x: 1, y:203}]})
  @HasMany(() => Log, 'errorId')
  logs: Log[]

  @ApiProperty({example: 'secret'})
  @AllowNull
  @Column({type: DataType.STRING})
  project: Project

  @ApiProperty({example: 'https://secret.com'})
  @Column({type: DataType.STRING, defaultValue: ''})
  href: string

  @ApiProperty({example: 'front'})
  @Column({type: DataType.STRING})
  type: Type

  @HasOne(() => Size, 'errorId')
  size: Size
}

模型日志

import {
  AutoIncrement,
  BelongsTo,
  Column,
  DataType,
  ForeignKey,
  Model,
  PrimaryKey,
  Table,
  Unique
} from "sequelize-typescript";
import {Error} from "@/models/error.model";

export interface ICreateSize {
  width: number
  height: number
  vHeight: number
}

@Table({modelName: 'size', createdAt: false, updatedAt: false})
export class Size extends Model<Size, ICreateSize> {
  @ForeignKey(() => Error)
  @PrimaryKey
  @AutoIncrement
  @Unique
  @Column({type: DataType.INTEGER})
  errorId: number

  @Column
  width: number

  @Column
  height: number

  @Column
  vHeight: number

  /* Associations */

  @BelongsTo(() => Error)
  error: Error
}

模型尺寸

import {
  AutoIncrement,
  BelongsTo,
  Column,
  DataType,
  ForeignKey,
  Model,
  PrimaryKey,
  Table,
  Unique
} from "sequelize-typescript";
import {Error} from "@/models/error.model";

export interface ILog {
  x: number,
  y: number
}

@Table({modelName: 'logs'})
export class Log extends Model<Log, ILog> {
  @ForeignKey(() => Error)
  @PrimaryKey
  @AutoIncrement
  @Unique
  @Column({type: DataType.INTEGER})
  errorId: number

  @Column
  x: number

  @Column
  y: number

  /* Associations */

  @BelongsTo(() => Error)
  error: Error
}

现在我才请求这条路线,它会保存除这些关联字段之外的所有字段

可能是什么问题??

找不到 typescript 装饰器的常规文档

【问题讨论】:

    标签: node.js typescript sequelize.js nest typescript-decorator


    【解决方案1】:

    问题是当我创建一个实例时我没有指定关联

           return this.errorModel.create (saveData, {include: [Log, Size]})
    

    我希望这能帮助人们不要像我一样坐三天沉思))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-18
      • 2012-08-08
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多