实体实例中具有unique:true的Typeorm错误

时间:2019-02-14 17:44:12

标签: node.js entity typeorm

这是我的错误: QueryFailedError:ER_BLOB_KEY_WITHOUT_LENGTH:键规范中使用的BLOB / TEXT列“用户名”,没有键长

如果我删除unique:true,一切正常!

导入{       实体,       PrimaryGeneratedColumn,       CreateDateColumn,       列,enter code here       在插入之前,     }来自“ typeorm”;

import * as bcrypt from 'bcryptjs';
import * as jwt from 'jsonwebtoken';
import { response } from 'express';
//utilizzo Entity da typeorm e creo la tabella User Entity('User)
@Entity('user')
export class UserEntity {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @CreateDateColumn()
  created: Date;

  @Column({
    type: 'text',
    unique: true,
  })
  username: string;

  @Column('text')
  password: string;

  @BeforeInsert()
  async hashPassword() {
    this.password = await bcrypt.hash(this.password, 10);
  }
  toResponseObject(showToken:boolean = true) {
    const { id, created, username,token } = this;

    const responseObject =  { id, created, username,token };
    if(showToken){
      responseObject.token = token
    }
    return responseObject;
  }

  async comparePassword(attempt: string) {
    return await bcrypt.compare(attempt, this.password);
  }

  private get token() {
    const { id, username } = this;
    return jwt.sign({
      id,
      username,
    },process.env.SECRET,{expiresIn:"7d"})
  }
}

2 个答案:

答案 0 :(得分:0)

如果我对它的理解正确,则不能将unique与文本列结合使用。 对我来说,解决方案是将类型切换为varchar。

答案 1 :(得分:0)

你可以,但是在实体旁边的 Unique 我认为它会起作用

@Entity('users')
@Unique(['email'])