乐闻世界logo
搜索文章和话题

How to correctly update an entity with express and typeorm

2 个月前提问
1 个月前修改
浏览次数18

1个答案

1

要在Express路由处理函数中实现更新逻辑。一个典型的更新实体的API可能是一个PUT或PATCH请求。例如,我们要更新用户信息,可以设置如下路由:

javascript
const express = require('express'); const router = express.Router(); const { User } = require('../entity/User'); // PATCH路由,用于部分更新用户信息 router.patch('/users/:id', async (req, res) => { try { const userId = req.params.id; const userData = req.body; // 更新用户信息的逻辑 const updatedUser = await updateUser(userId, userData); res.json(updatedUser); } catch (error) { res.status(400).json({ message: error.message }); } }); module.exports = router;

3. 实现更新逻辑

updateUser函数中,我们将使用TypeORM的功能来查找、验证并更新实体。首先,我们需要根据ID查找现有用户。

javascript
const { getRepository } = require('typeorm'); async function updateUser(userId, userData) { const userRepository = getRepository(User); // 查找现有用户 let user = await userRepository.findOne(userId); if (!user) { throw new Error('User not found'); } // 更新实体字段 Object.assign(user, userData); // 验证数据 const errors = await validate(user); if (errors.length > 0) { throw new Error(`Validation failed!`); } // 保存更新后的实体 await userRepository.save(user); return user; }

4. 数据验证

确保更新的数据符合业务规则和数据完整性要求。TypeORM可以与class-validator库配合使用来自动化验证过程。

javascript
const { validate } = require('class-validator'); // 此处为示例,需要根据实际实体属性来定义 async function validate(user) { const errors = await validate(user); return errors; }

5. 错误处理

在整个处理过程中,错误处理是很重要的一部分。在Express中,应确保捕获并恰当地响应各种错误情况,如找不到用户、验证失败等。

6. 测试

在部署代码之前,应该进行充分的测试,包括单元测试和集成测试,确保API按预期工作。

总结

上述步骤展示了如何在使用Express和TypeORM的环境下更新一个实体,包括准备路由、实现更新逻辑、进行数据验证和错误处理。在实际应用中,代码需要根据具体的实体属性和业务需求进行调整和优化。

2024年8月3日 16:51 回复

你的答案