在node.js数据访问层中处理错误

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

#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有验证错误,例如缺少字段等。
  • 用户已经存在user.email
  • 我的问题是如何在回调中返回这些错误?

    回调参数的选项:

  • (err, data) - 其中err是遇到的所有错误的数组。
  • (err, data) - 其中err是验证错误和数据库错误作为异常抛出。
  • (err, data) - 与上面相同,除非user已经存在,否则返回null,因为这不是错误,而是预期的行为。
  • (err, data, validation) - 其中validation是验证错误的数组或null
  • (err, data, model) - 返回一个带有验证属性的活动记录样式的模型类。
  • 随意提出一些不同的建议。

    后续问题:论证何时应该进行验证? 在控制器/路由级别,数据访问级别还是SQL数据库?

  • 在这两个层面上都会有很多重复的代码。 我宁愿干掉。
  • 使用静态键入,我会在控制器级别检测错误并可以信任类型系统。 没有静态键入的数据层不能真正相信任何人,所以它可能需要有所有的验证逻辑。
  • 通常会被静态类型检查拾取的错误应该会引发错误,因为我需要修复它们。 他们是错误。 但是,如果我找不到它们,我宁愿给用户一个愉快的消息,而不是内部服务器错误500或堆栈跟踪。
  • 如果我想将它发展成一个公共的API,我肯定会需要所有的验证。
  • 我打算使用node-validator和revalidator的组合来验证对象和参数。

    Backstory:由于大型社区,良好的Web插座支持和开发人员生产力的原因,我刚刚从Scala / Play转移到Node / Express。 在开始使用Sequelize ORM之后,我认为它过于束缚,无法创建连接,而且我的模式很简单,所以我开始编写原始SQL。 在开发速度提升后,我发现自己每天都需要静态打字。 我写的测试和验证代码的数量要大得多。


    我建议(err, data, validation)以便您可以轻松检查用户需要重新输入的无效输入,以及实际的数据库错误err ,这可能会在写入日志文件的详细信息期间输出错误消息测试和原型。

    链接地址: http://www.djcxy.com/p/67105.html

    上一篇: Error handling in node.js data access layer

    下一篇: How can I share code between Node.js and the browser?