【问题标题】:Type 'string' has no properties in common with type 'FindOneOptions<User>'类型 \'string\' 与类型 \'FindOneOptions<User>\' 没有共同的属性
【发布时间】:2022-08-10 01:26:57
【问题描述】:

我正在尝试使用 express.js 构建后端。我现在有以下问题:

import { Request, Response } from \"express\";
import { getManager } from \"typeorm\";
import { User } from \"../entity/user.entity\";


export const GetUser = async (req: Request, res: Response) => {
  const repository = getManager().getRepository(User);

  const { password, ...user } = await repository.findOne(req.params.id);

  res.send(user);
};

总是出现以下错误:

(参数) req: Request<ParamsDictionary, any, any, QueryString.ParsedQs, Record<string, any>> 类型 \'string\' 与类型 \'FindOneOptions\'.ts(2559) 没有共同的属性 路由器.ts

router.get(\"/api/users/:id\", AuthMiddleware, GetUser);

用户实体.ts

import {
  Column,
  Entity,
  JoinColumn,
  ManyToOne,
  PrimaryGeneratedColumn,
} from \"typeorm\";
import { Role } from \"./role.entity\";

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;
  @Column()
  first_name: string;
  @Column()
  last_name: string;
  @Column({
    unique: true,
  })
  email: string;
  @Column()
  password: string;

  @ManyToOne(() => Role)
  @JoinColumn({ name: \"role_id\" })
  role: Role;
}

谁能帮我解决我的问题?

    标签: node.js typescript express typeorm


    【解决方案1】:

    typeorm 的findOne 函数等价于Select * ... limit 1。这意味着findOne 实际上期望包含条件的对象匹配并返回满足条件的第一个元素。

    在您的情况下,代码应为:

    repository.findOne({where: {id: parseInt(req.params.id, 10)}})
    

    或者

    repository.findOneBy({id: parseInt(req.params.id, 10)})
    

    这将找到其id 字段将匹配req.params.id 的用户。

    【讨论】:

    • 感谢您的回答我尝试了两种解决方案,但它不起作用。 (属性) id?: number | FindOperator<number> 类型 'string' 不可分配给类型 'number | FindOperator<数字>'.ts(2322)
    • @bobby17jones,这是因为 req.params.id 是一个字符串,而在您的代码中,id 是 Int。只需使用#parseInt 函数就可以了。
    • @bobby17jones 更新了答案以解决您的问题。
    【解决方案2】:

    根据手册,使用{条件:搜索} 所以

    findOneBy({id: req.params.id});

    【讨论】:

      猜你喜欢
      • 2023-01-05
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 2020-06-14
      • 2020-03-29
      相关资源
      最近更新 更多