Sequelize 是 Node.js 中一款基于 Promise 的 ORM 框架,它提供了方便的数据库操作接口,支持多种数据库类型。但在实际应用中,由于数据的业务逻辑复杂,数据的合法性校验和错误处理成为了业务开发中的重要问题。本文将介绍在 Sequelize 中如何实现数据校验和错误处理的方法。
数据校验
简介
数据校验是确保数据合法性的重要手段,可以防止非法提交甚至攻击。在 Sequelize 中,我们可以使用内置的校验器或扩展校验器来实现数据校验。
内置校验器
Sequelize 内置了一些常用的数据校验器,我们可以直接使用这些校验器来验证数据的合法性:
- allowNull:是否允许为空
- defaultValue:默认值
- unique:是否唯一
- validate:自定义规则校验
下面我们以一个用户表为例,实现内置校验器的使用:
-- -------------------- ---- ------- ----- ---- - ------------------------ - ----- - ----- ----------------- ---------- ------ --------- - --------- ----- ---------- ---- ------ --- ---- ---- --------------- - -- ------ - ----- ----------------- ---------- ------ ------- ----- --------- - -------- ----- ----------- --------- ----- ----------- - -- --------- - ----- ----------------- ---------- ------ --------- - --------- ----- ---------- ---- ------ --- ---- ---- --------------- - - --
在上面的示例中,我们使用 allowNull 和 unique 校验器来验证数据的非空和唯一性,使用 validate 校验器来验证数据的自定义规则。具体的校验规则可以参考 sequelize 的文档。
扩展校验器
除了内置校验器外,我们还可以通过 sequelize.addHook 方法来拓展校验器。下面我们以一个订单表的例子来介绍如何拓展校验器:
-- -------------------- ---- ------- ----- ----- - ------------------------- - ------- - ----- ------------------ ---------- ------ --------- - --------- ----- ----------- - - -- ------------------------------- -------------- -------- ------- - -- ------------- -- -- - ----- --- -------------------- - --
在上面的示例中,我们使用 addHook 方法在 beforeValidate 钩子中添加了一个名为 checkAmount 的回调函数,当订单数量不符合规定时,我们抛出一个错误并提示信息。
错误处理
简介
在实际应用中,无论是对于用户而言,还是对于开发者而言,错误信息都至关重要,因此在 Sequelize 中,我们也需要对错误进行详细的处理。
错误处理模板方法
在 Sequelize 中,我们可以通过定义模板方法来对错误进行统一的处理,以便于减轻开发者的工作量。下面我们以一个 express 应用为例,介绍如何定义错误处理模板方法:
-- -------------------- ---- ------- ----- ------- - ------------------ ----- ---------- - ---------------------- ----- ----------- - -------------------- ----- --- - --------- ----- --------- - --- ----------------------------------------------------- -- ------ -------- ------------ ----- ---- ---- ----- - -- ---- ---------- -------------------------- - ----- ------ - ---------------- -- - ------ - ---- ------- -------- --------- - -- ------------------------------ - ---- - ------------------------------- ------------------ - - -- ----- -------------------------- --------------------- -- ---- ----------------- ----- ----- ---- -- - --- - ----- ---- - ----- -------------------------------------- -------------- - ----- ----- - --------- - -- -- -- ------- -- ----------------
在上面的代码中,我们定义了一个 errorHandler 方法,并将它注册到了 express 中间件中,当有错误抛出时,express 会回调该方法。如果错误是 Sequelize.ValidationError 实例,我们将它转换为一个格式化的错误信息并返回 400 状态码,否则返回 500 状态码。
错误码和错误信息
在 Sequelize 的错误处理中,我们可以使用错误码和错误信息来标识错误和提供错误信息。下面我们以一个商品表为例,来介绍一下如何定义错误码和错误信息:
-- -------------------- ---- ------- ----- ------- - --------------------------- - ----- - ----- ----------------- ---------- ------ --------- - --------- ----- ----------- - -- ------ - ----- ---------------- ---------- ------ --------- - --------- ----- ------------ -------- ----- ------------- - - -- -- ---------- --------------------- - ------ ----- -------- -------- ---------------------------- - ------ ----- -------- -----------
在上面的示例中,我们为商品表定义了两个错误码 Product.NotFoundError 和 Product.PaymentRequiredError,分别表示商品不存在和该商品需在线支付,并为每个错误码定义了对应的错误信息。
抛出和捕获异常
在 Sequelize 中,我们可以通过抛出异常和捕获异常来处理错误。下面我们以一个订单表为例,来介绍如何抛出和捕获异常:
-- -------------------- ---- ------- ----- ----- - ------------------------- - ------- - ----- ------------------------ ------- ------------- ---------- ------ ------------- -------- - -- -- ------ ----- -------- -------- ------- - -- ------------- --- ------- - ----- --- -------------- - -- ------- ------------ - ------ ----- ------------ ------ ----- - -- ------ -------------------------- ----- ----- ---- ----- -- - --- - ----- ----- - ----- ----------------------------- -- -------- - ----- ----- - --- -------------- ---------- - --------------- ----- ----- - -- ------------- --- ------------ - ----- ----- - --- -------------- ---------- - ----------------- ----- ----- - -- ------------- --- ------- - ----- ----- - --- -------------- ---------- - ----------------- ----- ----- - -- ------------- --- --------- - ----- --------------- --------------- - - ----- ----- - --------- - --
在上面的示例中,我们实现了一个订单支付逻辑,当订单已支付时,我们抛出一个名为 BadRequestError 的异常,当订单不存在时,我们抛出一个名为 NotFoundError 的异常。
总结
在日常应用开发中,数据合法性校验和错误处理是非常重要的问题。在 Sequelize 中,我们可以通过内置校验器、拓展校验器、统一错误处理方法、错误码和错误信息等方法来实现数据校验和错误处理的功能。如果我们能够熟练掌握这些方法,并且结合具体的业务场景,就能够更好地完成网站和应用的开发。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c277ca83d39b4881674844