validation - Node.js 数据访问层中的错误处理

标签 validation node.js coffeescript typechecking

假设我使用存储库模式进行数据访问,如下所示:

#userController.coffee

# `userId` is obtained from the session

user =
  email: 'Bob'
  password: 'Secret'

db.userRepo(@userId).create user, (err, data) =>
  # return results in http response or socket.io

这是此方法调用期间可能出现的错误:

  • 访问数据库时出错
  • 查询中存在语法错误
  • 在可变查询期间打破约束(我使用的是node-mysql)
  • 用户存在验证错误,例如缺少字段等。
  • user.email 中已存在用户。

我的问题是如何在回调中返回每个错误?

回调参数选项:

  • (err, data) - 其中 err 是遇到的所有错误的数组。
  • (err, data) - 其中 err 是验证错误,数据库错误将作为异常抛出。
  • (err, data) - 与上面相同,除了当 user 已经存在时它返回 null,因为这不是错误而是预期的行为。
  • (err, data,validation) - 其中 validation 是验证错误数组或 null
  • (err, data, model) - 返回带有验证属性的模型类 - 事件记录样式。

随意提出不同的建议。

后续问题:参数验证应该在哪里进行?在 Controller /路由级别、数据访问级别还是 SQL 数据库?

  • 在这两个级别上都会有大量重复的代码。我宁愿保持干燥。
  • 通过静态类型,我可以检测 Controller 级别的错误,并且可以信任类型系统。如果没有静态类型,数据层就无法真正信任任何人,因此它可能需要拥有所有验证逻辑。
  • 通常由静态类型检查发现的错误应该会抛出错误,因为我需要修复它们。它们是 bug 。但是,如果我没有找到它们,我宁愿给用户一条令人愉快的消息,而不是内部服务器错误 500 或堆栈跟踪。
  • 如果我想将其发展为公共(public) API,我肯定需要所有验证。

我计划使用 node-validator 的组合和 revalidator验证对象和参数。

背景故事:出于更大的社区、良好的 Web 套接字支持和开发人员生产力的原因,我刚刚从 Scala/Play 转移到 Node/Express。从 Sequelize 开始之后ORM 我认为它限制太多,创建连接时遇到困难,而且我的架构很简单,所以我开始编写原始 SQL。在开发速度最初提升之后,我发现自己每天都想恢复静态类型。我正在编写的测试和验证代码的数量要多得多。

最佳答案

我建议使用(err, data,validation),这样您就可以轻松检查用户需要重新输入的无效输入,以及实际的数据库错误err,在测试和原型(prototype)设计期间将详细信息写入日志文件时,它可以打印一条漂亮的错误消息。

关于validation - Node.js 数据访问层中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11622140/

相关文章:

javascript - 从 Rails View 调用 JS 函数

antlr - coffeescript 表达式的左分解语法

Javascript 构造函数属性在调用时不起作用

javascript - 如何在 native react 中验证 TextInput 值?

javascript - 有人可以为我解释这些 javascript 代码吗?

node.js - Nodejs express 上传文件debian vps报错

node.js - Mongoose 子模式数组虚拟

java - Instanceof Collection 未按预期运行

javascript - 同步检查子进程是否未能在 Node 中生成?

javascript - 如何在 coffeescript 中为 Google Apps 脚本生成全局命名的 javascript 函数