我尝试用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;
}
有人能帮我解决这个问题吗?
3条答案
按热度按时间mhd8tkvw1#
typeorm的
findOne
函数等价于Select * ... limit 1
,这意味着findOne
实际上期望包含条件的对象匹配并返回满足条件的第一个元素。在您的情况下,代码应为:
或
这将查找其
id
字段将匹配req.params.id
的用户。bxpogfeg2#
根据手册,使用{标准:搜索}所以
findOneBy({id: req.params.id});
1tu0hz3e3#
任何从NestJs v7迁移到v9的人都会遇到这个问题,因为他们使用不同的TypeORM版本。
结果发现这是TypeORM方面的重大更改。
从v0.2.x到v0.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