Nest.js 问题, 1:树形数据存修改如何操作。2: typeorm 异常如何处理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
LandCruiser
V2EX    Javascript

Nest.js 问题, 1:树形数据存修改如何操作。2: typeorm 异常如何处理

  •  
  •   LandCruiser 2023 年 8 月 28 日 1982 次点击
    这是一个创建于 919 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 问题 1:树形数据如何修改
    { "create_time": "2023-08-21T08:27:50.146Z", "update_time": "2023-08-24T07:54:34.000Z", "id": 1, "name": "部门 1", "code": "1111", "down_dep": [ { "create_time": "2023-08-21T08:27:50.146Z", "update_time": "2023-08-24T07:55:25.000Z", "id": 22, "name": "部门 2", "code": "100" } ], "up_dep": null }, 

    这种接口的数据怎么修改? 还有一个问题就是 DTO 中没有 create_time ,update_time 两个字段,修改时传入就会报错。

    • 第二个问题,typeorm 异常如何处理
     at Query.onResult (C:\pm-server\src\driver\mysql\MysqlQueryRunner.ts:222:33) at Query.execute (C:\pm-server\node_modules\mysql2\lib\commands\command.js:36:14) at PoolConnection.handlePacket (C:\pm-server\node_modules\mysql2\lib\connection.js:478:34) at PacketParser.onPacket (C:\pm-server\node_modules\mysql2\lib\connection.js:97:12) at PacketParser.executeStart (C:\pm-server\node_modules\mysql2\lib\packet_parser.js:75:16) at Socket.<anonymous> (C:\pm-server\node_modules\mysql2\lib\connection.js:104:25) at Socket.emit (node:events:513:28) at addChunk (node:internal/streams/readable:324:12) at readableAddChunk (node:internal/streams/readable:297:9) at Socket.Readable.push (node:internal/streams/readable:234:10) { query: 'INSERT INTO `dept`(`create_time`, `update_time`, `id`, `name`, `code`, `upDepId`) VALUES (DEFAULT, DEFAULT, DEFAULT, ?, ?, DEFAULT)', parameters: [ '456456', '1111' ], driverError: Error: Duplicate entry '456456' for key 'IDX_5eb4a4c9f25934f105299edffd' at Packet.asError (C:\pm-server\node_modules\mysql2\lib\packets\packet.js:728:17) at Query.execute (C:\pm-server\node_modules\mysql2\lib\commands\command.js:29:26) at PoolConnection.handlePacket (C:\pm-server\node_modules\mysql2\lib\connection.js:478:34) at PacketParser.onPacket (C:\pm-server\node_modules\mysql2\lib\connection.js:97:12) at PacketParser.executeStart (C:\pm-server\node_modules\mysql2\lib\packet_parser.js:75:16) at Socket.<anonymous> (C:\pm-server\node_modules\mysql2\lib\connection.js:104:25) at Socket.emit (node:events:513:28) at addChunk (node:internal/streams/readable:324:12) at readableAddChunk (node:internal/streams/readable:297:9) at Socket.Readable.push (node:internal/streams/readable:234:10) { code: 'ER_DUP_ENTRY', errno: 1062, sqlState: '23000', sqlMessage: "Duplicate entry '456456' for key 'IDX_5eb4a4c9f25934f105299edffd'", sql: "INSERT INTO `dept`(`create_time`, `update_time`, `id`, `name`, `code`, `upDepId`) VALUES (DEFAULT, DEFAULT, DEFAULT, '456456', '1111', DEFAULT)" }, code: 'ER_DUP_ENTRY', errno: 1062, sqlState: '23000', sqlMessage: "Duplicate entry '456456' for key 'IDX_5eb4a4c9f25934f105299edffd'", sql: "INSERT INTO `dept`(`create_time`, `update_time`, `id`, `name`, `code`, `upDepId`) VALUES (DEFAULT, DEFAULT, DEFAULT, '456456', '1111', DEFAULT)" }``` 值重复异常如何处理?自己写正则吗?
    9 条回复    2023-08-29 21:26:17 +08:00
    musi
        1
    musi  
       2023 年 8 月 28 日
    俩问题都看不懂
    1. 修改数据不是改数据库的吗,直接用 typeorm 提供的 API 不就可以改了?
    2. 值重复不是数据库的限制吗?你到底想不想要这个限制,不想要去掉就好了
    LandCruiser
        2
    LandCruiser  
    OP
       2023 年 8 月 28 日
    @musi 不行啊,update 不了,问题其实。第二个问题,我肯定是要这个字段的 unique 限制的,但是数据库返回给我的信息是一段 英文 Duplicate entry '456456' for key 'IDX_5eb4a4c9f25934f105299edffd'。 我现在想返回给用户的是{code:400 ,messgae:‘部门名称重复’}。这个过程需要我写什么代码呢? intercepetor ?还是什么
    guiling
        3
    guiling  
       2023 年 8 月 28 日   1
    第一个问题我估计你配了关联关系吧,一般更新最好还是单表更新,这种级联的不太好控制,create_time ,update_time 可以考虑分别配置成 CURRENT_TIMESTAMP ,CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,数据库会自动为你更新

    Duplicate entry xx for key 就是唯一索引重复,出数字段可以考虑直接用自增,一定要自己控制的话就封装个唯一 id 生成的工具类
    guiling
        4
    guiling  
       2023 年 8 月 28 日
    如果是要捕获异常的话,唯一键的只能匹配关键词了,但一般出现这种情况就说明系统有问题了,因该考虑修复
    lzgshsj
        5
    lzgshsj  
       2023 年 8 月 28 日   1
    异常就用 exception filter 啊,@Catch('xxx'),xxx 就是 typeorm 的错误类
    juzisang
        6
    juzisang  
       2023 年 8 月 28 日   1
    DTO 校验一遍基本的类型错误,自己在写代码校验一遍重复值,手动抛错出去,exception filter 一般只是为了控制一些全局错误...
    juzisang
        7
    juzisang  
       2023 年 8 月 28 日
    别想着框架或者库帮你干这些,顶多帮你校验一些基本的错误,和业务相关的校验还是需要自己搞手动抛的...
    encro
        8
    encro  
       2023 年 8 月 29 日   1
    异常最简单的办法就是捕获,然后查询 message 包含 Duplicate entry ,就修改异常信息。
    LandCruiser
        9
    LandCruiser  
    OP
       2023 年 8 月 29 日
    @juzisang 先查表,查有没有重复的,您是这个意思吗?先查再存,这种做法适用于生产吗?我服务端初学
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3011 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 14:54 PVG 22:54 LAX 06:54 JFK 09:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86