NodeJS 类型“string”与类型“FindOneOptions”没有共同的属性< User>

qmelpv7a  于 2023-03-01  发布在  Node.js
关注(0)|答案(3)|浏览(701)

我尝试用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);
};

始终会出现以下错误:
(参数)要求:类型'string'与类型'FindOneOptions'没有共同的属性。ts(2559)

路由器.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;
}

有人能帮我解决这个问题吗?

mhd8tkvw

mhd8tkvw1#

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的用户。

bxpogfeg

bxpogfeg2#

根据手册,使用{标准:搜索}所以
findOneBy({id: req.params.id});

1tu0hz3e

1tu0hz3e3#

任何从NestJs v7迁移到v9的人都会遇到这个问题,因为他们使用不同的TypeORM版本
结果发现这是TypeORM方面的重大更改。
v0.2.xv0.3.x有一个突破性的变化,他们放弃了findOne(id)方法,转而使用findOneBy({where : {id: id}})
点击此处查看:https://typeorm.io/changelog#breaking-changes-1

我有TypeORM版本0.3.12:

这里我得到了相同的错误

现在错误已解决:

这段视频给我敲响了警钟:https://www.youtube.com/watch?v=UEFEze_SQKU

相关问题