node.js - 如何使用express和typeorm正确更新实体

标签 node.js api express typeorm

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

我有这样的东西(我已经减少了,但是还有很多其他属性):

class User {
  id: string;
  lastname: string;
  firstname: string;
  email: string;
  password: string;
  isAdmin: boolean;
}

我有一个更新用户属性的路径,例如:

app.patch("/users/me", ensureAuthenticated, UserController.update);

现在(这是我的问题),如何正确更新用户?我不希望用户能够将自己添加为管理员。

所以我有:

export const update = async (req: Request, res: Response) => {
  const { sub } = res.locals.token;
  const { lastname, firstname, phone, email } = req.body;

  const userRepository = getRepository(User);
  const currentUser = await userRepository.findOne({ id: sub });

  const newUserData: User = {
    ...currentUser,
    lastname: lastname || currentUser.lastname,
    firstname: firstname || currentUser.firstname,
    phone: phone || currentUser.phone,
    email: email || currentUser.email
  };

  await userRepository
    .update({ id: sub }, newUserData)
    .then(r => {
      return res.status(204).send();
    })
    .catch(err => {
      logger.error(err);
      return res.status(500).json({ error: "Error." });
    });
};

这样,我就可以确定更新正确的属性,并且用户无法更新管理。 但我发现创建一个新对象并填写信息非常冗长。

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

最佳答案

您可以关注DTO pattern

例如:

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 框架有一个 good example一般如何设置 DTO 模式。但使用 class-validator 来推出自己的产品很容易。和 class-transformer这将使验证更具声明性。

关于node.js - 如何使用express和typeorm正确更新实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55629060/

相关文章:

arrays - Node JS : How to remove duplicates from Array

javascript - afterEach 的 Mocha 更改超时

java - 如何理解和实现 Twitter API 制作 Android Twitter 客户端

android - 检查应用程序在不同 API 版本/屏幕分辨率下的外观

jquery - NodeJS、Express 显示来自 AJAX POST 的 HTML 页面响应

javascript - Req.isAuthenticated 变为 false

javascript - 如何在 Express 上捕获 M-SEARCH 请求?

java - 如何使用 postman 休息客户端发送对象来调用 REST 服务,以便它将使用正确的方法参数命中下面给定的方法?

node.js - 从 Express 服务器响应中获取/读取 res.status() 值

javascript - 如何在node js中将cassandra数据库查询结果读取到UI