类型 'string' 与类型 'FindOneOptions<User>' 没有共同的属性

Type 'string' has no properties in common with type 'FindOneOptions<User>'

我正在尝试使用 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> 类型 'string' 与类型 'FindOneOptions'.ts(2559) 没有共同的属性 router.ts

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

user.entity.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;
}

谁能帮我解决我的问题?

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

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

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

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

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