Javascript / Java应用程序中的错误处理

时间:2018-12-18 14:09:55

标签: javascript java error-handling

我正在开发第一个结合Java和Javascript的应用程序。由于它越来越多,是时候实施一些适当的错误处理了。但老实说,我的经验为零。

我的应用程序仅允许用户填充存储在数据库中的不同配方。对于前端,我使用Angular。该数据库是MySQL,可与Hibernate和Spring一起使用。

前端中已经进行了一些检查,例如,验证用户是否键入了不超过10年的日期。但是我想到的是某种类型检查。例如,如果接收到的值确实是一个布尔值,如果不是,则抛出错误。

问题是:

应在哪里执行此类型检查?已经在使用Javascript的前端(“ typeof”的想法)或在将接收到的值添加到数据库之前不久在后端?使用Http状态代码或将错误写入日志文件是否更好?

也许您可以推荐一些适合您的最佳实践或选择。

非常感谢!

4 个答案:

答案 0 :(得分:3)

这里有两点很重要。

  1. 用户体验
  2. 系统安全

对于用户,您肯定希望尽早且经常(最好是交互式)进行验证。例如,您的银行网站不允许您在信用卡号中输入字母;它肯定会验证,并在您键入内容后立即将其变为红色。

尽管后端可能需要从前端以外的其他来源使用,但必须分别对其进行保护。另外,您可能不想让自己记住要更新UI验证以处理每个潜在的后端错误。

NPM和Maven中有很多不错的验证库,因此大多数验证的代码在两端都应该是微不足道的,并且将其同时保存可能是最安全的。

在担心整个系统整体之前,应始终分别对每个组件进行单元测试,并确保其自身的安全/功能。

您绝对应该使用HTTP状态代码在任何REST应用程序中向后端报告后端错误,并尝试使用正确的错误(例如,未找到,错误的参数,未授权的错误,内部错误)。无论您在前端做什么,都会遇到后端错误(例如,错误的SQL语法,数据库连接失败)。

答案 1 :(得分:2)

您应该在后端实现所有验证功能,基本上不要信任客户端数据。如果您的API在Internet上公开可用,人们将尝试使用,破坏或破解它。

此外,如果您决定编写其他客户端(例如Android应用),则可以在客户端之间安全地重用该API。随时在前端实施其他验证,以提供更好的用户体验,但是您不能跳过后端验证。

您可能不希望开发自己的API标准,而是要实现现有的标准之一,例如https://jsonapi.org/

答案 2 :(得分:2)

主要规则:

  • 在后端进行所有必要的检查:您永远不知道请求是否真的来自您的前端。因此,让前端进行一些检查很好,但是后端负责不让废话传递到您的数据库中。
  • 每当出现问题时,请告诉您的呼叫者(您的技术所支持的方式,例如Java中的异常,HTTP / HTTPS上的响应代码)。
  • 确保将每个问题都记录在一个问题中,并且将所有必要的信息都记录下来,以便以后进行分析。这通常包括堆栈跟踪,因此应该在将错误结果代码传递到前端之前登录后端。在此处使用错误日志级别。
  • 在运行应用程序站点的管理员看来有用的范围内,将其他WARN和INFO条目放入日志中。
  • 在搜索错误时,添加DEBUG日志以帮助您自己(开发人员)了解详细情况可能很有用。但是让日志记录框架正常抑制这些条目,否则管理员将不得不阅读烦人的(无关紧要的)无关日志数量。

答案 3 :(得分:2)

在后端进行验证

在后端验证您的数据。所有数据流都将通过后端进入数据库。

为什么在后端

想象一下,您提供了后端的公共api,而您仅在前端进行了一些验证。

仍然可以将数据添加到数据库中,因为您提供了公共api。有人可以像random-host:8080\delete\user\65434那样调用您的api。

前端没有验证吗?

当然!做一些验证-但这是针对“正常”客户端的用户体验的。通过这些验证,您的客户无需等待服务器端验证,因为他可以从您的前端直接获得反馈。