大家怎么在 service 处理验证失败的信息? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KouShuiYu
V2EX    Node.js

大家怎么在 service 处理验证失败的信息?

  •  
  •   KouShuiYu 2020-10-10 19:29:46 +08:00 3991 次点击
    这是一个创建于 1901 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如说注册用户用户名已存在之类的,这种信息怎么比较优雅的处理?
    8 条回复    2020-10-16 14:58:15 +08:00
    rbe
        1
    rbe  
       2020-10-10 20:12:34 +08:00
    目前是 throw new Error(), 然后再 controller 层 try catch
    也有些情况下抛错需要携带一些上下文一并返回,就返回一个特定的数据结构比如 success 啥的,在 controller 层判断
    dethan
        2
    dethan  
       2020-10-10 20:15:19 +08:00 via Android
    抛出特定异常,然后统一异常处理
    xuanbg
        3
    xuanbg  
       2020-10-10 20:30:44 +08:00
    我的处理和楼上不同,不抛出异常,直接返回一个错误信息。
    {
    "success": false,
    "code": 400,
    "message": "用户名已存在",
    "data": null,
    "option": null
    }
    youngxhui
        4
    youngxhui  
       2020-10-10 20:50:44 +08:00
    service 抛出自定义异常,然后框架统一处理异常
    lyusantu
        5
    lyusantu  
       2020-10-10 22:14:55 +08:00
    自定义一个通用的项目异常,然后写一个全局异常捕获处理器,处理器统一返回和接口同结构的 JSON 错误结果.

    service 中主动抛出自定义异常即可. 如: throw new ProjectException("验身份失败");

    抛出的异常会被处理器捕获,然后返回 {"code":500, "message":"验证身份失败", data: null}

    理论上, 抛出的可以是一个枚举,枚举包含一个错误码和一条错误信息
    huijiewei
        6
    huijiewei  
       2020-10-10 23:04:23 +08:00 via iPhone
    throw
    libook
        7
    libook  
       2020-10-12 12:33:05 +08:00
    服务端统一开辟一个 API 处理层,请求发进来先进入这个层,用于校验参数格式、调用底层业务逻辑、组合和格式化返回数据。
    对于注册时用户是否存在的问题,是在注册过程的事务中进行,确保用户不存在、创建用户为原子操作,一旦操作失败,可以 throw error,在 API 处理层 catch 这个 error,然后再组合好适当的信息和状态码返回给客户端。

    如果业务足够轻,不值得单独开辟一个 API 处理层,希望从 controller 层直接配置好 HTTP 状态码和返回信息,可以使用 http-error 或 http-assert 包来自动 throw error,并携带 HTTP 状态码和返回数据,然后在 API 路由上全局捕捉 error,直接把 http-error 携带的状态码和返回信息返回给客户端。

    koa.js 内置了 http-assert/http-error 机制,http-assert 的所有方法都可以直接从 ctx ( Context )中调用。
    chogath
        8
    chogath  
       2020-10-16 14:58:15 +08:00
    通用异常拦截器 + DTO pipe + controller 层 DTO 参数验证
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     916 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 94ms UTC 20:58 PVG 04:58 LAX 12:58 JFK 15:58
    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