bob*_*nes 17 node.js express typescript typeorm
我正在尝试用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);
};
Run Code Online (Sandbox Code Playgroud)
总是出现以下错误:
(参数)req:Request<ParamsDictionary,any,any,QueryString.ParsedQs,Record<string,any>>类型“string”与类型“FindOneOptions”没有共同属性。ts(2559)
路由器.ts
router.get("/api/users/:id", AuthMiddleware, GetUser);
Run Code Online (Sandbox Code Playgroud)
用户实体.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;
}
Run Code Online (Sandbox Code Playgroud)
谁能帮我解决我的问题吗?
Ash*_*hok 31
typeorm 的findOne功能相当于Select * ... limit 1. 这意味着findOne实际上期望包含条件的对象匹配并返回满足条件的第一个元素。
在你的情况下,代码应该是:
repository.findOne({where: {id: parseInt(req.params.id, 10)}})
Run Code Online (Sandbox Code Playgroud)
或者
repository.findOneBy({id: parseInt(req.params.id, 10)})
Run Code Online (Sandbox Code Playgroud)
这将找到其字段id与req.params.id.
任何从NestJs v7迁移到v9 的人都会遇到这个问题,因为他们使用不同的 TypeORM 版本。事实证明,这是TypeORM
方面的重大变化。
从v0.2.x到v0.3.x有一个重大更改,他们放弃了该方法,转而
检查此处: https: //typeorm.io/changelog#writing-changes-1findOne(id)findOneBy({where : {id: id}})

这个视频给我敲响了警钟: https://www.youtube.com/watch ?v=UEFEze_SQKU
| 归档时间: |
|
| 查看次数: |
34523 次 |
| 最近记录: |