在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
这是在这个方法调用期间可能会出错的地方:
user
有验证错误,例如缺少字段等。 user.email
。 我的问题是如何在回调中返回这些错误?
回调参数的选项:
(err, data)
- 其中err
是遇到的所有错误的数组。 (err, data)
- 其中err
是验证错误和数据库错误作为异常抛出。 (err, data)
- 与上面相同,除非user
已经存在,否则返回null,因为这不是错误,而是预期的行为。 (err, data, validation)
- 其中validation
是验证错误的数组或null
。 (err, data, model)
- 返回一个带有验证属性的活动记录样式的模型类。 随意提出一些不同的建议。
后续问题:论证何时应该进行验证? 在控制器/路由级别,数据访问级别还是SQL数据库?
我打算使用node-validator和revalidator的组合来验证对象和参数。
Backstory:由于大型社区,良好的Web插座支持和开发人员生产力的原因,我刚刚从Scala / Play转移到Node / Express。 在开始使用Sequelize ORM之后,我认为它过于束缚,无法创建连接,而且我的模式很简单,所以我开始编写原始SQL。 在开发速度提升后,我发现自己每天都需要静态打字。 我写的测试和验证代码的数量要大得多。
我建议(err, data, validation)
以便您可以轻松检查用户需要重新输入的无效输入,以及实际的数据库错误err
,这可能会在写入日志文件的详细信息期间输出错误消息测试和原型。