Node.js 如何使用express和TypeForm正确更新实体

Node.js 如何使用express和TypeForm正确更新实体,node.js,api,express,typeorm,Node.js,Api,Express,Typeorm,我正在寻找用typeorm和express更新用户实体的最佳方法 我有类似的东西(我减少了,但还有许多其他属性): 类用户{ id:字符串; lastname:string; 名字:字符串; 电子邮件:字符串; 密码:字符串; isAdmin:布尔型; } 我有一个更新用户属性的路径,如: app.patch(“/users/me”,确保重新验证,UserController.update); 现在(这是我的问题),如何正确地更新用户?我不希望用户能够将自己添加为管理员 因此,我: expo

我正在寻找用typeorm和express更新
用户
实体的最佳方法

我有类似的东西(我减少了,但还有许多其他属性):

类用户{
id:字符串;
lastname:string;
名字:字符串;
电子邮件:字符串;
密码:字符串;
isAdmin:布尔型;
}
我有一个更新用户属性的路径,如:

app.patch(“/users/me”,确保重新验证,UserController.update);
现在(这是我的问题),如何正确地更新用户?我不希望用户能够将自己添加为管理员

因此,我:

export const update=async(请求、回复)=>{
const{sub}=res.locals.token;
const{lastname,firstname,phone,email}=req.body;
const userRepository=getRepository(用户);
const currentUser=await userRepository.findOne({id:sub});
const newUserData:用户={
…当前用户,
lastname:lastname | | currentUser.lastname,
firstname:firstname | | currentUser.firstname,
phone:phone | | currentUser.phone,
电子邮件:email | | currentUser.email
};
等待用户存储库
.update({id:sub},newUserData)
.然后(r=>{
返回res.status(204.send();
})
.catch(错误=>{
记录器错误(err);
返回res.status(500.json)({error:“error.”});
});
};
这样,我肯定会更新正确的属性,而用户不能更新admin。 但是我发现创建一个新对象并填充信息非常冗长

你有更好的方法吗? 谢谢。

您可以按照以下步骤操作

例如:

class UserDto {
    // define properties
    constructor(data: any) {
        // validate data
        ...
    }
}

const userDto = new UserDto(req.body);                                          

await userRepository
    .update({ id: sub }, userDto)
    .then(r => {
        ...
    })
    .catch(err => {
        ...
    });

nestjs框架提供了一个通用的DTO模式设置方法。但是,您可以很容易地使用自己的应用程序,这将使验证更具声明性。

但是,当您将Nest与TypeORM一起使用时,会怎么样呢?然后,实体和DTO是独立的类,在将实体保存到存储库之前,您需要一种将实体与DTO中的数据合并的方法。是的,在这种情况下,您需要在保存实体类之前将DTO类转换为实体类。