嵌套JS&TypeORM无法正确使用findOne

0vvn1miw  于 2022-10-22  发布在  Java
关注(0)|答案(6)|浏览(432)

我正在尝试获取基于id的用户示例(对于email等其他属性也是如此。在服务内部,这是我的代码:

@Injectable()
export class UserService {
  @InjectRepository(User)
  private readonly repository: Repository<User>;

  async findOne(id: number): Promise<User> {
    const user = await this.repository.findOne(id);
    return user;
  }
}

我的用户实体是:

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  public id: number;

  @Column({ type: 'varchar', length: 120 })
  public name: string;

  @Column({ type: 'varchar', length: 120 })
  public email: string;
}

问题是我总是得到这个错误:src/api/user/user.service.ts - error TS2559: Type 'number' has no properties in common with type 'FindOneOptions<User>'.
其他方法(如getAll)工作得很好:

public getAllUsers(): Promise<User[]> {
  return this.repository.find();
}
aamkag61

aamkag611#

您使用的是typeorm的最新版本吗?然后将其降级为typeorm@0.2,因为@nestjs/typeorm@8.0可能还不支持最新版本。你可以在这里阅读typeorm@0.3的变化:https://github.com/typeorm/typeorm/releases/tag/0.3.0

bkhjykvo

bkhjykvo2#

typeorm中有一些突破性的变化。我不建议降级,而是检查最新的方法。
findOne(id);现在更改为

findOneBy({
id: id // where id is your column name
})

find()现在

find({
  select: {
    id: true,
    email: true,
    password: true,
  },
});

请查看this link了解更多信息。

9wbgstp7

9wbgstp73#

实际上,您不需要降级typeorm包。通过以下方式将findOne更改为:

async findOne(id: number): Promise<User> {
    const user = await this.repository.findOne({
           where: { id }
    });
    return user;
}
zbsbpyhn

zbsbpyhn4#

签入package.json文件,并用这个"typeorm": "^0.2.34"替换您的typeform版本

vh0rcniy

vh0rcniy5#

问题是typeform版本,请尝试typeorm版本0.2.25,它将正常工作

6psbrbz9

6psbrbz96#

还有人能解释一下吗。我正在查看一个代码,其中

async findOne(id: FindOneOptions<User>): Promise<User> {
    const user = await this.repository.findOne(id)
    return user;
}

这就完成了。虽然它不起作用,但为什么我们要将数字id声明为FindOneOptions<User>

相关问题